Я хочу проверить в своем веб-приложении, является ли пользователь администратором.
var obj = { admin: false; };
Object.defineProperty(obj, "admin", {
writable: false
});
Теперь пользователь может зайти в консоль и сделать:
Object.defineProperty(obj, "admin", {
writable: true
});
obj.admin = true;
Есть ли способ предотвратить это? Есть ли другой лучший способ предотвратить выполнение частей кода JavaScript, если применяются определенные критерии? Я понимаю, что пользователи могут изменить код в любом случае, так что я немного ищу хорошие практики.
3 ответа
Нет. Вы не можете запретить пользователям (таким как я) запускать мой собственный javascript в моем собственном браузере. Вам необходимо проверить, авторизоваться и авторизоваться на стороне сервера. Для аутентификации и авторизации запроса вам необходимо использовать стандартные механизмы, такие как куки, токены, ключи доступа API и т. Д.
Вы можете создавать свойства объектов, которые нельзя изменить с помощью Object.defineProperty
. Запустите фрагмент ниже, и вы увидите TypeError: Cannot redefine property: admin
в консоли.
const User = {};
Object.defineProperty( User, "admin", {
value: false
} );
Object.defineProperty( User, "admin", {
value: true
} );
Это связано с тем, что Object.defineProperty
по умолчанию имеет значение false для записи, настройки и перечисления. Вот исключение из объекта MDN объекта Документация .defineProperty, в которой говорится о переопределении существующих свойств.
Когда свойство уже существует, Object.defineProperty () пытается изменить свойство в соответствии со значениями в дескрипторе и текущей конфигурацией объекта. Если у старого дескриптора для настраиваемого атрибута установлено значение false, свойство считается «неконфигурируемым», и атрибут нельзя изменить (кроме одностороннего изменения записи на false). Невозможно переключаться между типом данных и типом свойства средства доступа, если свойство не настраивается.
При всем этом, использование этого в качестве меры безопасности доставит вам неприятности. Насколько безопасность вашего кода идет ...
- ВСЕГДА проверяйте данные, поступающие в ваше приложение.
- Сократите и запутайте ваш код.
- Используйте строгий режим. Это предотвратит множество небезопасных практик.
- Вы можете использовать линтеры для предотвращения более небезопасных действий.
- Читайте о распространенных ямах безопасности. Первая десятка OWASP - хорошее место, чтобы прочитать о некоторых из них.
Вы можете использовать Object.freeze
var obj = { admin: false };
Object.freeze(obj);
obj.admin = true;
console.log(obj)
// output {admin: false}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.