Проверка запроса – предотвращение атак скриптов

Введение

Новая возможность версии 1.1 ASP.NET, проверка достоверности запроса, защищает сервер от поступления HTML некодированного содержимого. Это свойство разработано, чтобы помочь предотвращать некоторые script-injection атаки, посредством которых код клиентского скрипта или HTML может неосознанно быть представлен серверу, сохранен и затем передан другим пользователям. Мы настоятельно рекомендуем вам проверять достоверность всех входных данных и HTML, кодирующих их.

Например, вы создаете Web страницу, которая запрашивает адрес электронной почты пользователя и затем сохраняет его в базе данных. Если пользователь вводит alert(“hello from script”) вместо действительного адреса электронной почты, если содержимое не было правильно кодировано, этот скрипт может выполняться. Новая возможность проверки достоверности запроса ASP.NET 1.1 предупреждает возникновение такой ситуации.

Чем полезна эта возможность

Большинство сайтов не осознают, что они открыты атакам внедрения простых скриптов. Является ли целью этих атак повреждение сайта или потенциальное выполнение клиентского скрипта, чтобы перенаправить пользователя на хакерский сайт, атаки внедрения скрипта – это проблема, с которой должны бороться разработчики Web.

Атаки внедрения скрипта являются проблемой для всех разработчиков web, несмотря на то используют ли они ASP.NET, ASP или другие технологии web разработки.

Новая возможность проверки достоверности запроса ASP.NET 1.1 защищает от этих атак, не позволяя серверу обрабатывать некодированное HTML содержимое до тех пор, пока разработчик не решит разрешить это содержимое.
Чего ожидать: страница ошибки

Ниже, показан пример ASP.NET кода:

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

Однако в том месте, где должен быть введен текст, мы введем текст JavaScript, такой как

<script>alert("hello!")</script>

и получим исключительную ситуацию:

Сообщение об ошибке констатирует, что “было обнаружено потенциально опасное значение Request.Form …”, и обеспечивает более детальное описание того, что именно произошло и как изменить поведение. Например:

Проверка достоверности запроса определила потенциальное опасное значение ввода клиента и обработка запроса была отменена. Это значение может указывать на попытку подрыва безопасности вашего приложения. Устанавливая validateRequest=false в директиве Page или в секции конфигурации, вы можете отключить проверку достоверности запроса. Однако в этом случае вашему приложению настоятельно рекомендуется явно проверять все входные данные.

Выключение проверки достоверности запроса на странице

Чтобы выключить проверку достоверности запроса на странице вы должны присвоить атрибуту validateRequest директивы Page значение false:

<%@ Page validateRequest="false"  %>

Предупреждение: когда проверка достоверности запроса выключена, потенциально опасное содержимое может быть отослано на сервер; обеспечение того, что содержимое должным образом кодировано или обработано, является ответственностью разработчика страницы.

Выключение проверки достоверности запроса для вашего приложения

Чтобы выключить проверку достоверности запроса для вашего приложения, вы должны модифицировать или создать файл Web.config для вашего приложения и присвоить атрибуту validateRequest секции <PAGES /> значение false:

<configuration> 
    <system.web> 
        <pages validateRequest="false" /> 
    </system.web> 
</configuration>

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

В код, приведенный ниже, внесены изменения, проверка достоверности запроса выключена:

Теперь, если в текстовое окно будет введен такой JavaScript

<script>alert("hello!")</script>

результат будет следующий:

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

Как HTML кодировать содержимое

Если вы выключили проверку достоверности запроса, хорошей практикой является HTML кодирование содержимого. HTML кодирование автоматически заменит любой ‘’ (вместе с некоторыми другими символами) соответствующими HTML кодированными представлениями.

Содержимое может быть запросто HTML кодировано на сервере, используя Server.HtmlEncode(string) API. Содержимое также может быть легко HTML декодировано, т.е. возвращено к стандартному HTML, используя метод Server.HtmlDecode(string).

В результате:

17 ноября 2006 в 14:38
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок