ASP.net опасная ошибка отправки - PullRequest
3 голосов
/ 13 марта 2011

Когда я пытаюсь запустить страницу форума:

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client 

В моем web.config у меня есть:

<pages validateRequest="false" smartNavigation="false">

И на самой странице у меня также есть:

<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" MasterPageFile="~/MasterPages/Main.master" %>

Но он продолжает выдавать эту ошибку!

Редактировать

Я исправил это с помощью:

<httpRuntime requestValidationMode="2.0" />

Но что это делает и почему это работает?

Ответы [ 2 ]

5 голосов
/ 13 марта 2011

Эта ошибка возникает из-за того, что что-то в отправленной форме или в строке запроса выглядело опасным для проверки в ASP.NET.

Добавляя

<httpRuntime requestValidationMode="2.0" />

вы ослабляете валидацию, которая применяется к стандартам ASP.NET 2.

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

Недавно я столкнулся с этим в проекте, над которым я работаю, когда мы обновили ASP.NET MVC3 (начиная с версии 2). В нашем случае это фактически выдвинуло на первый план проблему, из-за которой мы urlencoding нашей строки запроса, когда мы не хотели (т.е. вся строка запроса, включая знак вопроса и амперсанды, все кодировала url, когда это не должно быть).

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

5 голосов
/ 13 марта 2011

Возможно, в представленном тексте была разметка.http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes

Функция проверки запросов в ASP.NET обеспечивает определенный уровень защиты по умолчанию от атак межсайтового скриптинга (XSS).В предыдущих версиях ASP.NET проверка запросов была включена по умолчанию.Однако он применяется только к страницам ASP.NET (файлам .aspx и их файлам классов) и только при выполнении этих страниц.

В ASP.NET 4 по умолчанию проверка запросов включена для всех запросов,потому что он включен до фазы BeginRequest HTTP-запроса.В результате проверка запросов применяется к запросам для всех ресурсов ASP.NET, а не только к запросам страниц ASPX.Это включает в себя такие запросы, как вызовы веб-службы и пользовательские обработчики HTTP.Проверка запросов также активна, когда пользовательские модули HTTP считывают содержимое HTTP-запроса.

В результате теперь могут возникать ошибки проверки запросов для запросов, которые ранее не вызывали ошибок.Чтобы вернуться к поведению функции проверки запросов ASP.NET 2.0, добавьте следующий параметр в файл Web.config:

<httpRuntime requestValidationMode="2.0" />
...