Что мне нужно сделать, чтобы защитить свой сайт, если я решил установить ValidateRequest= false?

Я только что обнаружил, что, поскольку ValidateRequest = true по умолчанию, по умолчанию вы не можете вводить "<" или ">" в ​​любое поле ввода.

Мне не слишком много известно о XSS-атаках, что кажется довольно ограничительным.

Чтобы обойти это, я понял, что могу использовать validateRequest = false и кодировать пользовательские данные. Очевидно, у Microsoft есть веская причина для установки validateRequest = true, поэтому проблема в том, что у меня есть целый сайт с большим количеством страниц, и все с этой проблемой "не могу поставить <или>".

У меня вопрос: есть ли у меня только два варианта?

1) Оставьте validateRequest = true и не позволяйте пользователю вообще вводить <или> 2) переключите validateRequest = false и примите превентивные меры.

Если для 2, я должен закодировать все данные ввода? Как из текстовых полей от логинов и паролей к пользовательскому тексту для критериев поиска? Или мне нужно сделать это только для некоторых входных данных? Если да, то на какие поля я должен ориентироваться?

2 ответа

Решение

Я столкнулся с этой же проблемой и нашел ответ о переполнении стека здесь:
От клиента было обнаружено потенциально опасное значение Request.Form

Прочитайте комментарий высокого ранга в отмеченном ответе.
Вот что я использую в своем Web.Config, потому что я использую.net 4.0 framework:

<httpRuntime requestValidationMode="2.0" />

Затем я добавляю ValidateRequest="false" постранично:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/Site.Master"
    AutoEventWireup="true" CodeBehind="ScheduleAppointment.aspx.cs"
    Inherits="DentalPower.Pages.Public.ScheduleAppointment"
    ValidateRequest="false" %>

Было бы неплохо, если бы в Asp.net TexBoxes была функция, позволяющая установить для свойства ForceEncode значение true, которое будет автоматически кодировать ввод перед отправкой. Может быть, они сделают это... когда-нибудь.

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

Насколько я знаю, вы правы. Оставьте валидацию включенной или сделайте это вручную. Проблема в том, что проверка по умолчанию является чрезвычайно строгой и непрактичной во многих ситуациях (так много веб-приложений, которые я видел, просто отключают его для всего сайта, не задумываясь о последствиях).

Для справки, отличная статья о экранировании кода: http://wonko.com/post/html-escaping

Другие вопросы по тегам