Visual Basic, .NET, ASP, VBScript
 

   
 
Описание для автора не найдено
 
     
   
 
Проверка запроса – предотвращение атак скриптов
Перевод: Шатохина Надежда(sna@uneta.org), Ukraine .Net Alliance (http://www.uneta.org/)
Применяется к:
  • ASP.NET, IIS 6.0
  • Тема: ASP.NET
    Обзор:
    Новая возможность версии 1.1 ASP.NET, проверка достоверности запроса, защищает сервер от поступления HTML некодированного содержимого. Это свойство разработано, чтобы помочь предотвращать некоторые script-injection атаки, посредством которых код клиентского скрипта или HTML может неосознанно быть представлен серверу, сохранен и затем передан другим пользователям. Мы настоятельно рекомендуем вам проверять достоверность всех входных данных и HTML, кодирующих их.
    Содерджание:
  • Введение
  • Чем полезна эта возможность
  • Чего ожидать: страница ошибки
  • Выключение проверки достоверности запроса на странице
  • Выключение проверки достоверности запроса для вашего приложения
  • Как HTML кодировать содержимое
  • Введение

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

    Например, вы создаете Web страницу, которая запрашивает адрес электронной почты пользователя и затем сохраняет его в базе данных. Если пользователь вводит <SCRIPT>alert(“hello from script”)</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).

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

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

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

       
       
         
      VBNet рекомендует