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

Visual Studio 2010

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

Использование сценариев становится возможным, если пользователи могут поместить выполняемый код (или сценарий) в приложение. По умолчанию ASP.NET предоставляет проверку запросов, которая выдает ошибку, если отправленная форма содержит какие-либо элементы HTML.

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

  • Выполнить проверку параметров переменных формы, переменных строки запроса и значений файла Cookie. Проверка должна состоять из двух типов: проверки того, что переменные можно преобразовать в нужный тип (например, преобразовать в целое число, в дату-время и т. д.), и проверки допустимых диапазонов и форматирования. Например, переменную передачи формы, которая должна быть целым числом, следует проверить методом Int32.TryParse, чтобы убедиться, что значение переменной — действительное целое число. Кроме этого, результат следует проверить на принадлежность допустимому диапазону значений.

  • Примените кодировку HTML к строкам при записи значений в ответ. Это гарантирует, что входные данные строки, предоставленные пользователем, будут воспроизведены в виде статического текста в веб-обозревателе вместо исполняемого сценария или HTML-элементов.

Кодирование HTML позволяет преобразовывать элементы HTML с помощью зарезервированных знаков HTML таким образом, чтобы они отображались, но не исполнялись.

Применение кодирования HTML к строке

  • Перед отображением строк вызовите метод HtmlEncode. Элементы HTML будут преобразованы в строковое представление, которое будет отображено обозревателем, а не интерпретировано как HTML.

    В следующем примере показано кодирование HTML. В первом экземпляре введенные пользователем данные кодируются до их отображения. Во втором экземпляре кодируются данные из базы данных до их отображения.

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

    Этот пример будет работать только в случае, если будет отключена проверка запросов на странице путем добавления атрибута @ Page со значением ValidateRequest="false". Не рекомендуется отключать проверку запросов в реальном приложении, поэтому убедитесь, что она включена после просмотра этого примера.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles Button1.Click
            Label1.Text = Server.HtmlEncode(TextBox1.Text)
            Label2.Text = _
                Server.HtmlEncode(dsCustomers.Customers(0).CompanyName)
    End Sub
    
    

    private void Button1_Click(object sender, System.EventArgs e)
    {
        Label1.Text = Server.HtmlEncode(TextBox1.Text);
        Label2.Text = 
            Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
    }
    
Показ: