1,修改配置文件:

<httpRuntime requestValidationMode = "2.0" />

以上修改是必须的,因为高版本的.netframework

2,将需要提交危险字符的页面,关闭验证:

<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest = "false"

增加了一个配置:ValidateRequest = "false"   表示关闭当前页面的验证;

3,你需要在后台对能预见的所有提交字段进行编码,使用:HtmlEncode方法

注意:

1,你之所以关闭这个页面的验证,是因为你这个页面需要给用户提供提交“危险”字符的能力。

2,虽然给用户提供了可以提交危险字符的功能,但是不代表不需要处理。其实更合理的方式是,对危险字符提前进行转换,显示时再转换回去。比如用[]替换<>

很多人是在web.config直接关闭验证功能是不合适的,这相当于关闭了asp.net框架提供的安全保护功能;

<pages validateRequest="false"></pages>

这个配置是最好不要用的。

资料:https://www.aspsnippets.com/Articles/A-potentially-dangerous-RequestForm-value-was-detected-from-the-client.aspx

关键字:A potentially dangerous Request.Form value was detected from the client

默认情况下,ASP.Net会验证所有可能导致跨站点脚本和SQL注入的不安全内容的输入控件。因此,它通过抛出上述异常来禁止此类内容。默认情况下,建议允许在每次回发时进行此检查。

参考资料:https://www.c-sharpcorner.com/article/a-potentially-dangerous-request-form-value-was-detected-from-the-client/

参考资料:https://docs.microsoft.com/en-us/previous-versions/aspnet/hh882339(v=vs.110)?redirectedfrom=MSDN

文章标题:在ASP.NET中进行请求验证

这个才是好的参考资料,非常全面。

请求验证是ASP.NET中的一项功能,它检查HTTP请求并确定它是否包含潜在的危险内容。在这种情况下,潜在的危险内容是请求的正文,标头,查询字符串或cookie中的任何HTML标记或JavaScript代码。ASP.NET执行此检查,因为可能出于恶意目的添加了URL查询字符串,cookie或发布的表单值中的标记或代码。

例如,如果您的网站具有用户输入评论的表单,则恶意用户可以在script元素中输入JavaScript代码。当您向其他用户显示评论页面时,浏览器将执行JavaScript代码,就像该代码是您的网站生成的一样。此漏洞通常被称为跨站点脚本(XSS)攻击。

请求验证有助于防止这种攻击。如果ASP.NET在请求中检测到任何标记或代码,它将引发“检测到潜在危险值”错误并停止页面处理。

当检测到任何HTML标记(包括无害的标记,如<b>(粗体)元素)时,请求验证都会引发此异常。如果您希望您的应用程序接受HTML标记,则在这种情况下引发错误可能是一个问题。例如,如果您的站点允许用户添加评论,则您可能希望通过使用HTML标记(使文本以粗体或斜体显示)来使用户添加基本格式。在这种情况下,您可以禁用请求验证并手动检查恶意内容。或者,您可以自定义请求验证,以便接受某些类型的标记或脚本。有关如何自定义请求验证的信息,请参见白皮书《ASP.NET 4中的安全性扩展》(PDF)。有关如何指定自定义错误页面而不是默认错误页面的信息,请参阅如何:处理应用程序级错误。

安全须知

即使您正在使用请求验证,您也应该在从页面上获得用户输入的文本之前,先对其进行HTML编码。(除非您手动检查了它的潜在恶意标记,如稍后所述。)有关如何对文本进行HTML编码的信息,请参见博客条目ASP.NET 4中HTML编码输出的新<%:%>语法(和ASP.NET MVC 2),作者:Scott Guthrie。

禁用请求验证

安全须知

如果禁用请求验证,则必须检查用户自己输入的危险HTML或JavaScript。有关更多信息,请参见本主题后面的“ 手动检查请求”。

用于禁用请求验证的方法取决于您使用的ASP.NET Web应用程序类型:

  • ASP.NET Web表单

  • ASP.NET MVC

  • ASP.NET网页

在ASP.NET Web表单(ASP.NET 4或更高版本)中禁用请求验证

您可以禁用整个应用程序的请求验证,但是不建议这样做。建议仅针对要允许标记的虚拟路径或特定页面有选择地禁用请求验证。

无论哪种情况,您都必须在Web.config文件中进行两项更改。第一个更改是将httpRuntime元素的requestValidationMode属性设置为“ 2.0”。此设置使请求验证在请求处理事件的顺序中稍后发生。对于使用ASP.NET 4和更高版本的应用程序,此设置是必需的,因为从ASP.NET 4开始,请求验证在请求生命周期中比在早期版本的ASP.NET中更早进行。

XML格式复制

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

下面的示例显示如何使请求验证稍后在单个页面(在本例中为Test.aspx页面)中发生:

XML格式复制
<location path="test.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>

第二个更改是将validationRequest设置为false。对于整个应用程序,您可以使用Web.config文件中的pages元素执行此操作,如以下示例所示。(仅当您还设置了requestValidationMode =“ 2.0”时,此设置才有效。)

XML格式复制
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>

对于单个页面,可以在页面的@ Page指令中将validationRequest设置为false,如以下示例所示:

的HTML复制
<@ Page validateRequest="false" %>

在ASP.NET MVC中禁用请求验证

若要在ASP.NET MVC应用程序中禁用请求验证,您必须将请求验证更改为在请求处理顺序中的更早发生,如前面对ASP.NET Web窗体所述。在Web.config文件中,进行以下设置:

XML格式复制
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>

在ASP.NET MVC中,可以为请求中的操作方法,属性或字段(输入元素)禁用请求验证。如果禁用操作方法的验证,则对调用该方法的所有请求都禁用它,也就是说,所有用户输入均允许调用该操作方法的任何请求。因此,此方法是禁用请求验证的最不安全的方法。

如果禁用对属性的验证,则允许用户输入对该属性的任何引用。如果禁用特定字段的验证,则可以控制哪个请求元素(字段)允许任意用户输入。

要禁用动作方法的请求验证,请使用属性ValidateInput(false)标记该方法,如以下示例所示:

C#复制
[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(string comment)
{
if (ModelState.IsValid)
{
// Etc.
}
return View(comment);
}

要禁用对特定属性的请求验证,请使用AllowHtml属性标记属性定义:

C#复制
[AllowHtml]
public string Prop1 { get; set; }

若要对请求中的特定字段(例如,针对输入元素或查询字符串值)禁用请求验证,请在获取商品时调用Request.Unvalidated方法,如以下示例所示:

C#复制
var rawComment = Request.Unvalidated().Form["comment"];

在ASP.NET网页中禁用请求验证

若要禁用ASP.NET网页的请求验证,请在代码中调用Request.Unvalidated方法,并将要绕过请求验证的字段或其他对象的名称传递给该方法。以下代码段中的注释指示哪些代码行触发请求验证,哪些代码行不触发请求验证。

注意

在不包含Web窗体页面或MVC控制器的ASP.NET Web Pages应用程序中,您不必更改Web.config文件中的任何设置。

C#复制
var userComment = Request.Form["userInput"]; // Validated, throws error if input includes markup

Request.Unvalidated("userInput"); // Validation bypassed
Request.Unvalidated().Form["userInput"]; // Validation bypassed Request.QueryString["userPreference"]; // Validated
Request.Unvalidated().QueryString["userPreference"]; // Validation bypassed;

手动检查请求

如果禁用请求验证,则必须手动检查未验证的用户输入是否存在潜在的危险输入。检查危险输入对于应用程序的安全性至关重要。但是,这不一定是一件容易的事。如果您的代码存在缺陷,或者您忘记保护一页或一个字段,那么恶意用户最终可能会发现并利用该缺陷。

通常,您应该尽可能地限制将接受的HTML标签列表,并拒绝其他所有内容。(这种方法有时被称为使用安全条款列表或白名单。)

如果使用的是Web Forms页面,则通常可以使用第三方“富文本”控件,该控件使用户可以设置文本格式。这些控件通常具有内置的验证例程,该例程仅允许安全HTML。(如果使用控件,请确保它提供HTML安全性。)

如果不使用控件,则一种简单的方法是对用户输入进行HTML编码,然后仅对要允许的HTML标签进行有选择地取消编码。如果要允许的标签不包含属性,例如<b>,<strong>,<i>和<em>,则此方法很实用。以下示例显示了一种编码方式,然后仅对<b>和<i>标签进行选择性解码。

C#复制
// Encode the string input
StringBuilder sb = new StringBuilder(
HttpUtility.HtmlEncode(htmlInputTxt.Text));
// Selectively allow <b> and <i>
sb.Replace("&lt;b&gt;", "<b>");
sb.Replace("&lt;/b&gt;", "</b>");
sb.Replace("&lt;i&gt;", "<i>");
sb.Replace("&lt;/i&gt;", "</i>");

为了在用户输入中允许更灵活的HTML标记,您可以使用第三方库。示例包括可以从CodePlex网站上下载的HTML Agility Pack和开放源代码OWASP Anti-Samy实用程序。有关更多信息,请参见OWASP网站上的示例,该示例为ASP.NET禁用请求验证。

另一种方法是使用标记的替代形式,例如MarkDown,然后将用户的文本转换为有效且安全的HTML。许多Wiki使用这种方法。有关Markdown的更多信息,请参见Daring Fireball网站。

网址:https://html-agility-pack.net/?z=codeplex

附加信息

上面内容复制子微软官网,破坏掉了文章格式,请到原文查看。

从客户端(content="xxxxx")中检测到有潜在危险的 Request.Form 值——较合理解决方案的更多相关文章

  1. “从客户端(content="XXXX")中检测到有潜在危险的 Request.Form值” 解决方案

    解决方案一: 在.aspx文件头中加: <%@Page validateRequest="false" %> 解决方案二: 修改web.config文件: <co ...

  2. 从客户端(FCKeditor1="<p>...")中检测到有潜在危险的 Request.Form 值。

    从客户端(FCKeditor1="<p>...")中检测到有潜在危险的 Request.Form 值. 说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理 ...

  3. 从客户端中检测到有潜在危险的Request.Form值的详细解决方案

    ASP.Net1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力.当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个HttpRequestValidatio ...

  4. 从客户端(txtNewsContent="<hr />")中检测到有潜在危险的 Request.Form 值。怎么办呀?

    <system.web><httpRuntime requestValidationMode="2.0" executionTimeout="3600& ...

  5. ASP.NET MVC从客户端中检测到有潜在危险的 Request.Form 值

    ASP.NET MVC4(Razor)从客户端中检测到有潜在危险的 Request.Form 值 “/”应用程序中的服务器错误. 从客户端(Content=" sdfdddd ...&quo ...

  6. ASP.NET MVC4(Razor)从客户端中检测到有潜在危险的 Request.Form 值

    SP.NET MVC4(Razor)从客户端中检测到有潜在危险的 Request.Form 值 “/”应用程序中的服务器错误. 从客户端(Content=" sdfdddd ..." ...

  7. 从客户端中检测到有潜在危险的Request.Form 值

    今天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&q ...

  8. MVC中提示错误:从客户端中检测到有潜在危险的 Request.Form 值的详细解决方法

    今天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&q ...

  9. mvc 从客户端 中检测到有潜在危险的 Request.Form 值

    天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&qu ...

随机推荐

  1. [xsy3553]游戏

    题意:交互题,交互库有长为$n$的$01$串$S$,你可以用字符串$T$询问$\sum\limits_{i=1}^n[S_i=T_i]$,要求用$1030$次询问问出$S$,$n=5000$ 首先我们 ...

  2. 解决vue项目在ie浏览器缓存问题。

    ie浏览器一直是程序员的噩梦.项目在谷歌浏览器上完美运行.在ie浏览器上,缓存问题真心恶心.后台查看了资料说在接口上加上时间戳或随机数就行了.要是这样干,工作量真心大啊.后来我对我们公司大神封装的ax ...

  3. Git config文件

    查看该文件: git config --global --list Ref: https://blog.csdn.net/themagickeyjianan/article/details/79683 ...

  4. html遮罩层实现

    html文件内容如下 <!--调出子窗口按钮--> <button class="add" onclick="addClick();"> ...

  5. VB2015运行项目时出现的错误

    错误:未能加载文件或程序集“System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856a ...

  6. 长乐国庆集训Day4

    T1 一道数论神题 题目 [题目描述] LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删 ...

  7. LeetCode 5215. 黄金矿工(Java)DFS

    题目: 5215. 黄金矿工 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量:如果该 ...

  8. libevent源码分析三--signal事件响应

    libevent支持io事件,timeout事件,signal事件,这篇文件将分析libevent是如何组织signal事件,以及如何实现signal事件响应的. 1.  sigmap 类似于io事件 ...

  9. 国际化地区语言码对照表(i18n)

    af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG ...

  10. python_三目运算

    首先确定三目运算的使用条件, if只有两个才能用三目  只有 if:else:    先写个if else的小例子: if push == "lpush": self.conn.l ...