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

本文介绍了ASP.NET中因请求验证导致的应用程序错误,解释了ValidateRequest属性的作用,并提供了两种禁用请求验证的方法来解决问题。

 asp.net程序运行时出现以下错误:

“/news”应用程序中的服务器错误。
--------------------------------------------------------------------------------

从客户端(ftbContent="<P><A href="http://l...")中检测到有潜在危险的 Request.Form 值。

 


说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示危及应用程序安全的尝试,如跨站点的脚本攻击。通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。

异常详细信息: System.Web.HttpRequestValidationException: 从客户端(ftbContent="<P><A href="http://l...")中检测到有潜在危险的 Request.Form 值



以上为系统报错信息。原因是,在 ASP.NET 1.1 中,@Page 指令上的 ValidateRequest 属性被打开后,将检查以确定用户没有在查询字符串、Cookie 或表单域中发送有潜在危险性的 HTML 标记。如果检测到这种情况,将引发异常并中止该请求。该属性默认情况下是打开的;您无需进行任何操作就可以得到保护。如果您想允许 HTML 标记通过,必须主动禁用该属性。

解决办法:

方法一、修改.aspx文件

在.aspx文件中加入validateRequest="false",形如:

<%@ Page validateRequest="false" language="c#" Codebehind="WriteNews.aspx.cs" AutoEventWireup="false" Inherits="News.WriteNews" %>

方法二、配置web.config文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
  <system.web>

    <!--  WriteNews.aspx使用内容编辑框时必须添加该语句,否则无法 Request值
    -->
<pages validateRequest="false"/>

   </system.web>
</configuration>

推荐使用方法一。

ASP.NET中,当从客户端接收到包含特殊字符(如`<`和`>`)的`Request.Form`时,会触发潜在危险的请求错误,这是ASP.NET为了防止跨站脚本攻击(XSS)而设置的安全机制。以下是几种决该问题的方法: #### 方法一:使用`ValidateRequest="false"` 在页面的`<%@ Page %>`指令中添加`ValidateRequest="false"`,可以禁用页面级别的请求验证。示例代码如下: ```aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="YourPage.aspx.cs" Inherits="YourNamespace.YourPage" ValidateRequest="false" %> ``` 不过,这种方法会使整个页面都不进行请求验证,存在一定安全风险,需要在代码中手动进行输入验证和清理。 #### 方法二:在Web.config中配置 可以在`Web.config`文件中为整个应用程序或特定的路由禁用请求验证。示例代码如下: ```xml <system.web> <pages validateRequest="false" /> <httpRuntime requestValidationMode="2.0" /> </system.web> ``` 同样,这种方法也需要手动进行输入验证和清理,以确保应用程序的安全性。 #### 方法三:手动处理输入 在代码中手动处理输入,使用`HttpUtility.HtmlEncode`方法对输入进行编码,以防止XSS攻击。示例代码如下: ```csharp protected void Page_Load(object sender, EventArgs e) { string xmlData = Request.Form["XmlData"]; if (!string.IsNullOrEmpty(xmlData)) { string encodedXmlData = System.Web.HttpUtility.HtmlEncode(xmlData); // 处理编码后的XmlData } } ``` #### 方法四:使用`AllowHtml`属性 如果使用的是ASP.NET MVC,可以在模型属性上使用`[AllowHtml]`属性,允许该属性接收包含HTML标记的输入。示例代码如下: ```csharp public class YourModel { [AllowHtml] public string XmlData { get; set; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值