Практическое руководство. Защита от использования сценариев в веб-приложениях с помощью применения кодирования HTML к строкам
Обновлен: Ноябрь 2007
Использование сценариев становится возможным, если пользователи могут поместить выполняемый код (или сценарий) в приложение. По умолчанию ASP.NET предоставляет проверку запросов, которая выдает ошибку, если отправленная форма содержит какие-либо элементы HTML.
Защититься от использования сценариев можно следующими способами.
Выполнить проверку параметров переменных формы, переменных строки запроса и значений файла Cookie. Проверка должна состоять из двух типов: проверки того, что переменные можно преобразовать в нужный тип (например, преобразовать в целое число, в дату-время и т. д.), и проверки допустимых диапазонов и форматирования. Например, переменную передачи формы, которая должна быть целым числом, следует проверить методом Int32.TryParse, чтобы убедиться, что значение переменной — действительное целое число. Кроме этого, результат следует проверить на принадлежность допустимому диапазону значений.
Примените кодировку HTML к строкам при записи значений в ответ. Это гарантирует, что входные данные строки, предоставленные пользователем, будут воспроизведены в виде статического текста в веб-обозревателе вместо исполняемого сценария или HTML-элементов.
Кодирование HTML позволяет преобразовывать элементы HTML с помощью зарезервированных знаков HTML таким образом, чтобы они отображались, но не исполнялись.
Применение кодирования HTML к строке
Перед отображением строк вызовите метод HtmlEncode. Элементы HTML будут преобразованы в строковое представление, которое будет отображено обозревателем, а не интерпретировано как HTML.
В следующем примере показано кодирование HTML. В первом экземпляре введенные пользователем данные кодируются до их отображения. Во втором экземпляре кодируются данные из базы данных до их отображения.
Примечание.
Этот пример будет работать только в случае, если будет отключена проверка запросов на странице путем добавления атрибута @ 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); }
См. также
Основные понятия
Общие сведения об использовании сценариев