Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом документе описывается функция проверки запроса ASP.NET, где по умолчанию приложение не может обрабатывать незакодированное HTML-содержимое, отправленное на сервер. Эта функция проверки запроса может быть отключена, если приложение было разработано для безопасной обработки HTML-данных.
Применимо к ASP.NET 1.1 и ASP.NET 2.0.
Проверка запроса, функция ASP.NET с версии 1.1, запрещает серверу принимать содержимое, содержащее некодированный HTML. Эта функция предназначена для предотвращения некоторых атак внедрения скриптов, в которых код клиентского скрипта или HTML можно неназнательно отправлять на сервер, хранить и затем представлять другим пользователям. Мы по-прежнему настоятельно рекомендуем проверить все входные данные и кодировать HTML при необходимости.
Например, вы создаете веб-страницу, которая запрашивает адрес электронной почты пользователя, а затем сохраняет этот адрес электронной почты в базе данных. Если пользователь вводит <SCRIPT>alert("hello from script")</SCRIPT> вместо допустимого адреса электронной почты, когда эти данные отображаются, этот скрипт может выполниться, если содержимое не было правильно закодировано. Функция проверки запроса ASP.NET предотвращает это.
Почему эта функция полезна
Многие сайты не знают, что они открыты для простых атак внедрения скриптов. Независимо от того, являются ли эти атаки попыткой взлома сайта путем демонстрации HTML или потенциальным выполнением клиентского скрипта для перенаправления пользователя на сайт хакера, атаки с внедрением скриптов - это проблема, с которой должны бороться веб-разработчики.
Атаки на внедрение скриптов являются проблемой для всех веб-разработчиков, независимо от того, используют ли они ASP.NET, ASP или другие технологии веб-разработки.
Функция проверки запросов ASP.NET заранее предотвращает эти атаки, не разрешая обработку незакодированного HTML-содержимого сервером, если разработчик не решит разрешить это содержимое.
Что ожидать: страница ошибок
На снимке экрана ниже показан пример кода ASP.NET:
Выполнение этого кода приводит к простой странице, которая позволяет ввести текст в текстовом поле, нажать кнопку и отобразить текст в элементе управления метками:
Однако, если бы JavaScript, такой как <script>alert("hello!")</script>, был введен и отправлен, мы бы получили исключение.
Сообщение об ошибке указывает, что обнаружено "потенциально опасное значение Request.Form" и содержит дополнительные сведения в описании о том, что произошло, и как изменить поведение. Рассмотрим пример.
Проверка запроса обнаружила потенциально опасное значение ввода клиента, и обработка запроса была прервана. Это значение может указывать на попытку скомпрометировать безопасность приложения, например атаку на междоменный скрипт. Вы можете отключить проверку запросов, установив директиву validateRequest=false в директиве страницы или в разделе конфигурации. Однако настоятельно рекомендуется явно проверить все входные данные приложения в этом случае.
Отключение проверки запроса на странице
Чтобы отключить проверку запроса на странице, необходимо задать значение атрибута директивы страницы validateRequest: false
<%@ Page validateRequest="false" %>
Предостережение
При отключении проверки запроса содержимое может быть отправлено на страницу; Это ответственность разработчика страницы, чтобы убедиться, что содержимое правильно закодировано или обработано.
Отключение проверки запросов для приложения
Чтобы отключить проверку запросов для приложения, необходимо изменить или создать файл Web.config для приложения и задать атрибут <pages /> validateRequest раздела следующим false образом:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
Если вы хотите отключить проверку запросов для всех приложений на сервере, вы можете внести это изменение в файл Machine.config.
Предостережение
При отключении проверки запроса содержимое можно отправить в приложение; Разработчик приложений несет ответственность за правильное кодирование или обработку содержимого.
Приведенный ниже код изменен, чтобы отключить проверку запроса:
Теперь, если следующий JavaScript был введен в текстовое поле <script>alert("hello!")</script> , результат будет следующим:
Чтобы предотвратить это, при отключенной проверке запроса необходимо закодировать содержимое в ФОРМАТЕ HTML.
Как кодировать содержимое HTML
Если проверка запроса отключена, рекомендуется использовать содержимое в формате HTML, которое будет храниться для дальнейшего использования. Кодирование HTML автоматически заменит любые символы, такие как "<" или ">" (а также несколько других символов), на их соответствующее представление в кодировке HTML. Например, "<" заменяется на "<", а ">" заменяется на ">". Браузеры используют эти специальные коды для отображения "<" или ">" в браузере.
Содержимое можно легко закодировать в HTML на сервере с помощью API Server.HtmlEncode(string). Содержимое может быть легко HTML-декодировано, т. е. возвращено обратно в стандартный HTML с помощью метода Server.HtmlDecode(string).
Результат: