Поделиться через


Общие сведения об использовании сценариев

Обновлен: Ноябрь 2007

Для обозревателя веб-страница представляет собой просто длинную строку из знаков. Обозревать последовательно обрабатывает эту строку, отображая одни знаки и обрабатывая другие, например <b> и <script> в соответствии со специальными правилами. Если злонамеренному пользователю удается вставить некоторые особые знаки на страницу, то обозреватель обрабатывает их как часть страницы, хотя эти знаки на странице быть не должны.

Упрощенное использование сценария описано ниже. Если приложение позволяет пользователям отправлять комментарии о последних фильмах, которые читают другие пользователи, этапы сценария могут быть следующими:

  1. Приложение отображает форму, в которую пользователи вводят комментарии. Злонамеренный пользователь включает в свой комментарий блок <script>.

  2. Пользователь отправляет форму, и его комментарий сохраняется в базе данных.

  3. Другой пользователь заходит на узел. При создании страницы приложение считывает комментарии из базы данных и помещает их на страницу. Код <script>злонамеренного пользователя записывается на странице в качестве текстового комментария.

  4. Когда обозреватель второго пользователя отображает страницу, он доходит до блока script> и выполняет его.

Существуют также и другие способы использования сценариев злонамеренными пользователями. Обычная практика заключается в том, что враждебные сценарии должны быть приняты приложением и скопированы на страницу, где они выполняются обозревателем. Возможный вред от таких сценариев зависит от самого выполняемого сценария. Вред может быть незначительным и представлять собой, например, сообщение, которое всплывает в обозревателе. Однако вред может быть и серьезным в случае кражи cookie или вводимых пользователем данных (например пароля), а если уровень безопасности в Интернете низкий, то возможно даже выполнение машинного кода на компьютере пользователя.

Дополнительные сведения о предотвращении внедрения сценариев см. в разделе Практическое руководство. Защита от использования сценариев в веб-приложениях с помощью применения кодирования HTML к строкам.

w1sw53ds.alert_note(ru-ru,VS.90).gifПримечание.

ASP.NET помогает защититься от атак с использованием сценариев, скрытых в URL-адресах, путем поиска потенциально опасных строк, например "<!", "</" и "<?".

Использование инструкций SQL

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

"Select * From Customers where CustomerName = " & txtCustomerName.Value

Однако злонамеренный пользователь, владеющий сведениями о базе данных, может использовать текстовое поле для ввода имени пользователя с встроенной инструкцией SQL, в результате чего может получиться следующая инструкция:

Select * From Customers Where CustomerName = 'a' Delete From Customers Where CustomerName > ''

После выполнения запроса базе данных наносится вред.

Защита от использования сценариев

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

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

ASP.NET предоставляет несколько способов защиты от использования сценариев:

  • ASP.NET выполняет проверку запросов в строках запроса и переменные в формах, а также значения файлов Cookie. По умолчанию, если текущий запрос Request содержит элементы HTML или определенные символы HTML (например символ длинного тире (em dash) &#151;), среда страницы ASP.NET отображает ошибку.

  • Если в приложении необходимо отображать строки, которые могут быть враждебными, следует применить к ним кодировку HTML, когда строки записываются обратно при ответе. Например, при использовании кодировки тег <b>превращается в &lt;b&gt;. Этот способ можно также применять, если отображаемые строки принадлежат базе данных, доверять которой не следует.

  • Если необходимо, чтобы приложение принимало некоторые знаки HTML (например инструкции форматирования пользователей), следует создать HTML-код в клиенте до передачи на сервер. Дополнительные сведения см. в разделе Практическое руководство. Защита от использования сценариев в веб-приложениях с помощью применения кодирования HTML к строкам.

  • Чтобы защитить приложение от использования инструкций SQL, не следует создавать запросы SQL с помощью объединения строк. Вместо этого лучше использовать запрос с заданными параметрами и присвоить параметрам вводимые пользователем данные. Дополнительные сведения см. в разделе Параметры команд адаптеров обработки данных.

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

См. также

Задачи

Практическое руководство. Защита от использования сценариев в веб-приложениях с помощью применения кодирования HTML к строкам

Основные понятия

Общие сведения об угрозах безопасности веб-приложений

Основные методы обеспечения безопасности веб-приложений