Как избежать “Нападений Сценария перекрестного Сайта”

Как Вы избегаете нападений сценария перекрестного сайта?

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

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

Я надеюсь, что Вы понимаете мой вопрос и что Вы можете помочь мне.

9
задан danben 9 August 2010 в 11:56
поделиться

2 ответа

Я уверен, что это можно сделать fx. в PHP путем проверки форм

Не совсем. Стадия ввода - совершенно неподходящее место для решения проблем XSS.

Если пользователь вводит, скажем, во входные данные, в этом нет ничего плохого. Я только что сделал это в этом сообщении, и если бы StackOverflow не разрешил это, нам было бы очень трудно говорить о JavaScript на сайте! В большинстве случаев вы хотите разрешить любой ввод (*), чтобы пользователи могли использовать символ < для буквального обозначения знака «меньше».

Дело в том, что когда вы пишете какой-то текст на HTML-странице, вы должны правильно экранировать его для контекста, в который он входит. Для PHP это означает использование htmlspecialchars () на выходном каскаде :

<p> Hello, <?php echo htmlspecialchars($name); ?>! </p>

[PHP-подсказка: вы можете определить себе функцию с более коротким именем для выполнения echo htmlspecialchars , поскольку это довольно много ввода, чтобы делать каждый раз, когда вы хотите поместить переменную в некоторый HTML. ]

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

Например, если вы вставляете текст в строковый литерал JavaScript, вам придется экранировать символ кавычки, обратную косую черту и символы новой строки. Если вы вставляете текст в компонент запроса в URL-адресе, вам нужно будет преобразовать большинство не буквенно-цифровых символов в последовательности % xx . В каждом контексте есть свои правила; вы должны знать, какая функция является правильной для каждого контекста в выбранном вами языке / фреймворке. Вы не можете решить эти проблемы, искажая отправку форм на этапе ввода - хотя многие наивные программисты PHP пытаются, поэтому так много приложений портят ваш ввод в крайних случаях и по-прежнему небезопасны.

(*: ну, почти любой. Есть разумный аргумент в пользу фильтрации управляющих символов ASCII из отправленного текста. Очень маловероятно, что их разрешение принесет пользу. Плюс, конечно, у вас будут проверки для конкретного приложения, которые вы захотите сделать, например, убедиться, что поле электронной почты выглядит как адрес электронной почты или что числа действительно являются числовыми. Но это не то, что можно применить ко всем входным данным, чтобы избежать неприятностей.)

14
ответ дан 4 December 2019 в 09:11
поделиться

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

Следует иметь в виду, что не только данные, поступающие непосредственно от клиента, могут содержать атаку. Атака Stored XSS включает запись вредоносного кода JavaScript в базу данных, содержимое которой затем запрашивается веб-приложением. Если база данных может быть написана отдельно от клиента, приложение может быть не в состоянии быть уверенным, что данные были экранированы должным образом. По этой причине веб-приложение должно обрабатывать ВСЕ данные, которые оно записывает клиенту, как если бы они могли содержать атаку.

См. Ссылку на подробный ресурс о том, как защитить себя: http://www.owasp.org/index.php/XSS_ (Cross_Site_Scripting) _Prevention_Cheat_Sheet

9
ответ дан 4 December 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: