ASP.net危险提交错误

Tom*_*len 3 c# asp.net yetanotherforum

当我尝试运行论坛页面时:

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client 
Run Code Online (Sandbox Code Playgroud)

在我的web.config中,我有:

<pages validateRequest="false" smartNavigation="false">
Run Code Online (Sandbox Code Playgroud)

在实际页面上我也有:

<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" MasterPageFile="~/MasterPages/Main.master" %>
Run Code Online (Sandbox Code Playgroud)

但它一直在抛出这个错误!

编辑

我修复它:

<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)

但这是做什么的,为什么会有效呢?

I a*_*ica 5

提交的文本中可能存在标记.http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes

ASP.NET中的请求验证功能为跨站点脚本(XSS)攻击提供了一定级别的默认保护.在以前版本的ASP.NET中,默认情况下启用了请求验证.但是,它仅适用于ASP.NET页面(.aspx文件及其类文件),并且仅在这些页面执行时才应用.

在ASP.NET 4中,默认情况下,为所有请求启用请求验证,因为它在HTTP请求的BeginRequest阶段之前启用.因此,请求验证适用于所有ASP.NET资源的请求,而不仅仅是.aspx页面请求.这包括Web服务调用和自定义HTTP处理程序等请求.当自定义HTTP模块正在读取HTTP请求的内容时,请求验证也处于活动状态.

因此,现在可能会对先前未触发错误的请求发生请求验证错误.若要还原到ASP.NET 2.0请求验证功能的行为,请在Web.config文件中添加以下设置:

<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)


Rob*_*ine 5

发生此错误是因为提交的表单或查询字符串中的某些内容对ASP.NET中的验证显得很危险.

通过增加

<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)

您正在放松应用于ASP.NET 2标准的验证.

我会说你试图在你的表单/查询字符串中确切地解决它的问题,而不仅仅是放松验证.这种严格的验证可以保护您和您的用户,不应轻易放松.

我最近在我升级到ASP.NET MVC3(从版本2)开始的项目中遇到了这个问题.在我们的例子中,它实际上突出了一个问题,即当我们不打算对我们的查询字符串进行urlencoding时(即包括问号和&符号的整个字符串在不应该被编码时都被编码).

无论你的原因是什么,寻找根本原因,而不是放松验证,如果它是可能的.