Потенциально опасный Request.Form
Кто-нибудь знает, почему я получаю следующую ошибку? У меня включена отладка.
Server Error in '/' Application.
--------------------------------------------------------------------------------
A potentially dangerous Request.Form value was detected from the client (strContent="<p>
test</p>
").
Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. You can disable request validation by setting validateRequest=false in the Page directive or in the configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case.
Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (strContent="<p>
test</p>
").
Source Error:
The source code that generated this unhandled exception can only be shown when compiled in debug mode. To enable this, please follow one of the below steps, then request the URL:
1. Add a "Debug=true" directive at the top of the file that generated the error. Example:
<%@ Page Language="C#" Debug="true" %>
or:
2) Add the following section to the configuration file of your application:
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
</configuration>
Note that this second technique will cause all files within a given application to be compiled in debug mode. The first technique will cause only that particular file to be compiled in debug mode.
Important: Running applications in debug mode does incur a memory/performance overhead. You should make sure that an application has debugging disabled before deploying into production scenario.
Stack Trace:
[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (strContent="<p>
test</p>
").]
System.Web.HttpRequest.ValidateString(String s, String valueName, String collectionName) +8725306
System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, String collectionName) +111
System.Web.HttpRequest.get_Form() +129
System.Web.HttpRequest.get_HasForm() +8725415
System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) +97
System.Web.UI.Page.DeterminePostBackMode() +63
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +6785
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +242
System.Web.UI.Page.ProcessRequest() +80
System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21
System.Web.UI.Page.ProcessRequest(HttpContext context) +49
ASP.ajax_create_new_page_aspx.ProcessRequest(HttpContext context) +37
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3615; ASP.NET Version:2.0.50727.3618
Ответы
Ответ 1
Сообщение содержит HTML-элементы (тэг <p>
в вашем случае) - это может быть указание межсайтового сценария атаки, поэтому asp.net не разрешает его по умолчанию.
Вы должны либо кодировать HTML перед отправкой (передовой практикой), либо отключить предупреждение и потенциально подвергнуть себя XSS.
Ответ 2
В файле web.config в тегах вставьте элемент httpRuntime с атрибутом requestValidationMode = "2.0". Также добавьте в элемент pages атрибут validateRequest = "false".
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
<pages validateRequest="false" />
</system.web>
</configuration>
Ответ 3
Это потому, что у вас есть теги HTML в вашем запросе POST
. Для этого вам нужно установить ValidateRequest= false
в свои директивы @Page
. Но помните, что это может подвергнуть ваш сайт атакам сценариев Cross Site.
Ответ 4
Поместите [AllowHtml]
в вашу модель.
Ответ 5
Убедитесь, что вы меняетесь
в фактическом Web.config. Я менял его в файлах Web.debug.config и Web.release.config, и это не сработало.
Ответ 6
Мне пришлось немного поиграть в моем файле web.config
, особенно в разделе system.web
xml, чтобы найти, где я могу обновить директивы <pages>
... как вы отметили. Как только я добавил атрибут validateReqest = "false"
в директиву страниц в файле web.config
, он снова сделал все целым.
В моем конкретном случае это НЕ на производственном сервере, и это также не код уровня производства. Это частный локальный сервер, со мной только в качестве единственного пользователя в среде, поэтому мне становится легче обновлять эту настройку. Как показано ниже:
<system.web>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false" />
</system.web>
Ответ 7
Если это приложение MVC, вы можете применить этот атрибут на уровне Controller Action
, чтобы игнорировать проверку ввода:
[ValidateInput (ложь)]