Когда очищать текстовое поле XML, чтобы не помечать его как XSS - PullRequest
0 голосов
/ 28 октября 2009

У меня есть приложение ASP.NET, которое отображает XML набора данных в текстовом поле при нажатии кнопки.

Повторное нажатие кнопки должно перезапустить запрос, но до того, как это может произойти, я получаю сообщение об ошибке: «потенциально опасное значение Request.Form было обнаружено клиентом (txtXML="<NewDataSet> ...)». Очевидно, угловые скобки интерпретируется как потенциальная атака межсайтового скриптинга.

Я попытался очистить текст в текстовом поле в обработчике события нажатия кнопки и в методе Page_Load (), но, похоже, это слишком поздно.

Есть ли еще одно событие, которое я могу обработать, что позволит мне очистить текст достаточно рано в процессе обработки запроса?

Ответы [ 2 ]

0 голосов
/ 28 октября 2009

В клиенте обнаружено потенциально опасное значение Request.Form

Да, это совершенно ложная попытка ASP.NET смягчить уязвимости межсайтового скриптинга. Вы можете отключить его, добавив:

ValidateRequest="false"

к директиве @Page в верхней части вашего шаблона.

Естественно, вы должны быть уверены, что правильно экранировали все входящие символы <& перед тем, как выплевывать их в текстовую область, иначе вы будете уязвимы для атак XSS. Но это так даже при включенном ValidateRequest; он покупает вам только запутанность и иллюзию безопасности.

Позор MS за то, что по умолчанию включил эту неправильную функцию взлома приложений.

Если вам не нужно отправлять txtXML со следующим запросом, попробуйте переместить его из формы / удалить атрибут name.

0 голосов
/ 28 октября 2009

Вы можете очистить текстовое поле на стороне клиента, используя JavaScript перед отправкой ненужных данных обратно на сервер:

Кнопка включения: <asp:Button OnClientClick="document.getElementById(...).value = '';" .... /> или что-то подобное.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...