2010-07-07 3 views
7

Есть ли способы предотвратить или сделать это достаточно сложным для того, чтобы кто-то мог ввести Javascript и манипулировать переменными или функциями доступа? Я думал, что я должен изменить все имена переменных произвольно при каждой перезагрузке, чтобы скрипт вредоносного ПО нужно было переписывать каждый раз? Или есть другие менее болезненные пути?Способы сделать Javascript код взлома/инъекции/манипуляции трудно?

Я понимаю, что в конечном итоге кто-то взломает свой путь, но я хотел бы знать, как сложно воспроизвести действие, чтобы люди не публиковали букмарклет или что-то подобное для всех. Мне все равно, если эксперты найдут свой путь в коде, но мне бы хотелось, чтобы это было немного сложнее, чем javascript:d=0;

Если вы знаете, как сделать взломать Javascript немного сложнее, напишите об этом.

+2

Обфускация является частью пути. – Artelius

+2

Трудно? Да. Трудно? Никогда для реальной безопасности (но этого может быть достаточно, чтобы остановить легкое обманывание в играх или что-то еще). –

+1

Я полагаю, что вопрос: «Почему это имеет значение?» Если на сервер отправлено состояние, полагаясь на охранников на конце JS, это плохая практика, если данные не отправляются, а кто теряет? – spender

ответ

14

Вы можете написать свой JS, чтобы использовать только частные методы и переменные в функции самоисполнения. Например, следующий код не оставляет никаких признаков самого себя в глобальном пространстве имен для любого, кто обезьян с.

(function(){ 
    var x = 1; 
    var y = 2; 
    var z = "A am z"; 
    var clickHandler = function() { 
     alert('You clicked the body'); 
    }; 
    document.getElementsByTagName('body')[0].addEventListener('click',clickHandler,true); 
}()); 

[EDIT] Приведенный выше код чувствителен к пользователю перезапись любые доступные глобально объекты, методы, события или свойства, которые вы используете (в данном случае, document, getElementsByTagName и addEventListener), так что если вы действительно параноик, вы можете скопировать их в область вашей функции до того, как страница загрузится, и у пользователя есть возможность перезаписать их. Использование addEventListener - хорошая идея, поскольку в отличие от события body.onclick его нельзя удалить или перезаписать вне функции.

+0

Это полезно спасибо. – stagas

+2

У вас есть ошибка в последней строке, это должно быть '})();' Я думаю – stagas

+0

Я так писал, что до тех пор, пока Крокфорд не попал мне в голову. За исключением отсутствующей точки с запятой (которую я добавлю), приведенный выше код выполняет проверку в соответствии с JSLint; – Andrew

24

Подтвердите, что ваш javascript будет «манипулировать» и сделать обеспечение на стороне сервера. В принципе вы ничего не можете сделать, чтобы остановить людей, которые возились с клиентом.

+0

Спасибо, я думал о том, как сделать это сложно, на самом деле не очень важно предотвращать манипуляции, но я бы хотел, чтобы по крайней мере кто-то опубликовал букмарклет, чтобы «сделать эту крутую вещь», чтобы все могли взломать. Меня не волнует, найдет ли эксперт в конечном итоге способ, но мне бы хотелось, чтобы это было достаточно сложно для noobs, и, возможно, сложно воспроизвести действие без использования инструментов, если это возможно. – stagas

+3

Я согласен с @spender. Проблема с вашим сценарием заключается в том, что лучшее, что вы можете сделать, это безопасность через неясность. Это будет стоить вам много времени и усилий и никогда не решит проблему полностью, поэтому вам всегда придется делать это на стороне сервера. – flpmor

+0

Я не могу согласиться. Безопасность через неясность - плохая идея. Вам необходимо выполнить проверку на стороне сервера. Период. –

-1

Обфускация и минификация должны сделать это немного сложнее взломать, но я согласен с спрей.

0

Любой пользователь, который действительно захочет вмешаться в работу клиента, сможет. Код находится на его машине. Даже если вы запутываете код на стороне клиента, есть инструменты, которые помогут кому-то деобфискурить код за секунду.

Что вам нужно подумать, хотя делает сайт безопасным на сервере и безопасным для других пользователей. Это означает (как минимум):

  1. Проверка/Проверка каждый запрос и входных параметров на сервере, так что пользователи не смогут изменять какие-либо стороне сервера данных путем запуска «взломаны» на стороне клиента функции, которые вы написали ,

  2. Проверьте все данные, которые вы выводили на экран, который был создан с пользовательского ввода. Другие пользователи, возможно, вставили скрипты на стороне клиента, которые являются опасными для вашего сайта, и особенно опасны для других пользователей вашего сайта. (Если вы используете .net, то проверьте библиотеку AntiXSS)

 Смежные вопросы

  • Нет связанных вопросов^_^