Можно ли как-то помешать пользователям изменять переменные JavaScript через адресную строку или с помощью таких программ, как FireBug?
5 ответов
JavaScript - это необработанный исходный код, интерпретируемый на клиентском компьютере, поэтому короткий ответ - нет. Лучше всего вы сможете выполнить как можно больше работы на сервере. Любой код JavaScript, который вы отправляете клиенту, может быть подделан клиентом.
Это один из тех вопросов, который в значительной степени требует ответа «Какова ваша конечная цель?"
Как утверждают другие, нет, вы не можете. JavaScript на стороне клиента, так что полностью в руках клиента, а не вас.
Обфускация, как уже упоминалось, может быть полезной, но это определенно не безопасный и надежный способ ее предотвращения.
Если это что-то, что вам нужно по соображениям безопасности, то ответ, скорее всего, не следует делать с клиентским JavaScript в первую очередь.
Вы можете создать частные переменные и использовать метод доступа, чтобы получить их
var mySingleton = function(){
/* here are my private variables and methods */
var privateVariable = 'something private';
function showPrivate(){
console.log(privateVariable);
}
/* public variables and methods (which can access private variables and methods ) */
return {
publicMethod:function(){
showPrivate();
},
publicVar:'the public can see this!'
}
}
var single = mySingleton();
single.publicMethod(); // logs 'something private'
console.log(single.publicVar); // logs 'the public can see this!'
Нет, но вы можете запутать свой код, чтобы его было трудно читать и перепроектировать.
Я добавлю свои 2 цента для пользователей, которые попадают на эту страницу из Google.
Используйте Object.freeze() или Object.seal() для блокировки объекта.
Помните: «Почти» все в javascript - это объект.
Использование:
var myVariable = {"key1":50};
Object.freeze(myVariable);
myVariable.key1 = 100;//Modifying the value
console.table(myVariable);//Still gives value as 50, rather than 100
Также эти методы необратимы. Таким образом, пользователь не может просто распечатать или разморозить объект. Хотя пользователь может переопределить переменную для самого нового объекта.