Как предотвратить изменение кода HTML / JavaScript - PullRequest
4 голосов
/ 07 ноября 2010

Я хотел бы знать, есть ли способ запретить пользователю изменять html-страницу с помощью jQuery или javascript для изменения его поведения.

Пользователь может изменить его с помощью таких инструментов, как FireBug или панель разработчика Google Chrome, чтобы скрыть или показать элементы div, добавить прослушиватели событий для элементов страницы и т. Д.

Я видел некоторые веб-страницы, показывающие блокирующий div при загрузке страницы и всплывающее окно с ответом на какой-то вопрос. Если вы ответите, div скрывается, и вы можете видеть страницу в обычном режиме. Но если вы попытаетесь скрыть блокирующий div с помощью FireBug, страница перезагрузится, и вы не сможете увидеть страницу правильно, если вы не ответите на вопрос, заданный во всплывающем окне.

Я хочу знать, как я могу запретить пользователю делать такие вещи.

Большое спасибо.

Ответы [ 8 ]

7 голосов
/ 07 ноября 2010

Это невозможно (что является очень хорошей вещью).

5 голосов
/ 07 ноября 2010

Чтобы победить метод, описанный в вопросе:

  • Вы можете использовать сочетания клавиш для консоли / инструментов ( Ctrl + Shift + I в Chrome)
  • Вы можете использовать панель ресурсов / сети для просмотра источника
  • Вы можете увидеть его на любом другом уровне, например, Fiddler
  • Вы можете использовать букмарклет для более легкого доступа

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

4 голосов
/ 07 ноября 2010

Единственный способ сделать это (на мой взгляд) - не загружать содержимое страницы, пока пользователь не выполнит желаемое действие.После того, как он ответит на вопрос (или что-то еще), вы отправите AJAX-запрос на контент (конечно, как сказал jh, вы также должны проверить ответ на сервере, предпочтительно в том же запросе).Таким образом, вы загружаете заголовок страницы, баннеры и все, что не критично, но фактический контент (скажем, статья в блоге) не должен загружаться, пока пользователь не выполнит ваши действия.

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

2 голосов
/ 07 ноября 2010

Конечно, вы не можете помешать кому-либо делать то, что он хочет, но вы можете сделать изменения более сложными.

Взгляните на DOMEvents , особенно Mutation-Events,Они дают вам возможность видеть, когда что-то имеет изменения (атрибуты, удаленные / вставленные узлы, данные в текстовых узлах ...).Например, вы можете создать функцию, которая отслеживает некоторые специальные атрибуты, которые вам не нужно менять, и перезагрузите страницу, если это произойдет.

2 голосов
/ 07 ноября 2010

Как уже говорили другие, невозможно контролировать действия конечного пользователя с данными, которые вы ему отправили.

Может быть возможно обнаружить console объект, который используют Firebug и другие, но что ваш сайт может сделать с этой информацией, как только вы ее получите? Вы не можете отключить firebug или запретить его использование, или даже узнать, использовался ли он.

Суть в том, что как только веб-страница и код javscript были отправлены в браузер, он становится вне вашего контроля.

Самое близкое, что вы можете получить к тому, что вы хотите, - это переместить часть вашего кода из Javascript на сервер, где он будет недоступен для пользователя. Однако вам все равно придется иметь некоторый код на стороне клиента, который по-прежнему будет зависеть от злоумышленников.

Другая альтернатива - перейти на Flash или что-то подобное, где конечный пользователь не имеет прямого доступа к коду или объектной модели. Однако у этого есть свои недостатки, и вы бы уклонились от тенденции, которая заключается в переходе от Flash к HTML5 и Javascript.

1 голос
/ 07 ноября 2010

Это невозможно.Когда вы отправляете код клиенту, клиент может посмотреть на него и изменить его.Только код, работающий на вашем сервере, защищен.

0 голосов
/ 07 ноября 2010

Используйте ajax для получения удаленной информации. Не отправляйте пользователю всю информацию, такую ​​как ответы на опросы и т. Д., Получите ответ после того, как он выберет сервер, например, с помощью ajax.Проверка на стороне клиента никогда не бывает хорошей, черт возьми, именно так я и использовал для удаления баз данных других глупых людей, потому что, если люди не научатся должным образом, как ДЕЙСТВИТЕЛЬНО работают, им придется научиться трудному пути, такому как потеря всего в случае уязвимости корневого доступа.

Я не знаю, почему HTML должен быть заблокирован, он не был заблокирован, так как браузеры вышли, он мог бы я сделать свой собственный браузер с сокетом и передать HTML прямо в какое-то текстовое поле и увидеть его вмой любимый блокнот / редактор и т.д ..

Что касается javascript, вы можете просто отправлять команды javascript в адресную строку браузера (насколько это удобно для браузеров при поддержке хакеров, но он также используется для взаимодействия во взаимодействии с другими технологиями, такими какВспышка, так что он имеет злую / добрую сторону, как и все.)

Если вы не знали, вы можете просто сделать

javascript: alert('hi');

или если ваша игра javascript или что-то еще в глобальном масштабепеременные, которые вы можете легко изменить их

javascript: score=9999;damage=99999;

и т. д., как я уже сказал, это всеood это отсеивает плохих программистов и увольняет их или преподает им урок в будущем.

Я видел, что многие большие сайты все еще падают на SIMPLE XSS-атаку (межсайтовый скриптинг), которая просто сбивает с толкукак эти программисты получают работу, я бы лучше взял интервью или еще какое-то дерьмо, это смешно

0 голосов
/ 07 ноября 2010

Я не думаю, что это возможно сделать, если вы не можете убедить (или заставить) пользователей использовать браузеры, у которых нет инструмента разработчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...