从客户端检测到潜在危险的 Request.Form 值
Posted
技术标签:
【中文标题】从客户端检测到潜在危险的 Request.Form 值【英文标题】:A potentially dangerous Request.Form value was detected from the client 【发布时间】:2012-02-26 03:52:36 【问题描述】:我有这个问题。我已经尝试了一切。 ValidateRequest="false".. 以及解码和编码 html.. 等等等等..
我需要的是一个弹出框(所以我使用 ModalPopupExtender)呈现给用户,人们可以在其中输入 xml 设置并单击确定/取消按钮以关闭弹出窗口并保存。
但是我不断收到此错误“”..
下面是我的测试代码(我的场景和错误的快速示例)..
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1"
ValidateRequest="false" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:Panel ID="Popup" runat="server" Width="800px" Style="display: none;">
<asp:LinkButton ID="Display" runat="server" Style="display: none;" OnClick="Display_Click" />
<cc1:ModalPopupExtender ID="ModalPopupExtender" runat="server" TargetControlID="Display"
PopupControlID="Popup" DropShadow="false" Y="10" />
<div id="Item">
<div class="Item">
<table >
<tr>
<td>
<textarea id="txtAreaValue" cols="35" rows="6" style="resize: none;" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnOk" Text="Ok" SkinID="default" Width="50px" runat="server" />
<asp:Button ID="btnCancel" Text="Cancel" SkinID="default" Width="50px" OnClick="BtnCancel_Click"
runat="server" />
</td>
</tr>
</table>
</div>
</div>
</asp:Panel>
</div>
</form>
</body>
</html>
代码背后:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
public partial class WebForm1 : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
ModalPopupExtender.Show();
string str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><XmlConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> <XmlConfig Type=\"TEST\" DefiningXpath=\"/PERSON/NAME\"><Index Name=\"Name\" XPath=\"/PERSON/NAME/VALUE\" Type=\"String\" /><Index Name=\"Id\" XPath=\"/PERSON/NAME/ID\" Type=\"String\" /> </XmlConfig></XmlConfig>";
txtAreaValue.InnerText = str;
protected void Display_Click(object sender, EventArgs e)
//Shows the Item detail Edit box
ModalPopupExtender.Show();
protected void BtnCancel_Click(object sender, EventArgs e)
ModalPopupExtender.Hide();
运行代码.. 将 ref 添加到 AjaxControltoolkit.dll 然后运行,您将看到 textarea 填充了 xml。单击取消按钮,这会导致错误。请问谁能帮帮我?
【问题讨论】:
看看这个***.com/questions/2673850/… A potentially dangerous Request.Form value was detected from the client的可能重复 感谢 mikey :-) 它成功了.. 谢谢不敢相信它是如此简单.. 另一个问题是,这只适用于框架 4? 3.5 呢? 在 3.5 上不需要它,因为问题来自 4.0 发生的更改(我没有注意到链接到的一个 mikey,尽管我不同意 @JonEgerton 的重复声明为虽然所有信息都在那里,但它不是同一个问答,尽管 mikey 是)。 【参考方案1】:使用
<httpRuntime requestValidationMode="2.0" />
在您的 web.config 中(保留该元素上已有的任何属性,如果它已经存在的话)。否则 ASP.NET4.0 会忽略 ValidateRequest
。
当然,请确保您采取必要措施来防止真正危险的请求,因为这不是为您完成的。
编辑:这样做的一个好方法是创建您自己的从RequestValidator
派生的类,并使用 4.0 行为,但将其作为进行检查的类。
【讨论】:
嗨 Jon 有什么方法可以在不更改 web.config 文件的情况下实现这一点。抱歉在错误的地方提问:) @AkshayKulkarni 更改主 .NET 配置以更改默认 web.config?我想这会起作用,但是如果您不想更改 web.config,那么您真的不想更改它。但实际上,使用高级配置来阻止在该级别未强制执行的内容并没有多大意义。为什么不直接更改 web.config? 另外我在 MSDN 上找到了一个很好的描述:Disabling Request Validation。您可以使用<system.web>
中的<pages validateRequest="false" />
设置。【参考方案2】:
以下是可能对您有所帮助的解决方案。 为此进行服务器端配置设置。 如果您希望允许 HTML 元素作为项目中选定页面的输入,则设置此页面属性。
<%@ Page ValidateRequest="false" %>
每个页面上的这个 ValidateRequest="false"。 如果您想在项目中的所有页面中进行更改,而不是在 Web.Config 文件中进行更改。 将此标签添加到节中。
如果您使用的是 .Net 4.0,则必须在 Web.Config 文件中再做一项更改。 将此标签添加到节中。
<httpRuntime requestValidationMode="2.0" />
这里是不验证 .Net 4.0 中所有页面的请求的配置
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
<pages validateRequest="false">
</pages>
</configuration>
这是关于此的完整示例。 Click Here...
【讨论】:
哪个 Web.config?一个用于 Web 应用程序还是一个用于视图?【参考方案3】:嗯,人们只在谈论 Asp.net 4.0……我想我们也需要解决其他版本。今天,当我用 TinyMCE 替换我的 AjaxToolkit 编辑器时,我遇到了同样的问题,并且使用回发我发现了同样的问题。
“从客户端检测到有潜在危险的 Request.Form 值”..
所以我在我的 webconfig 中使用了这一行,它对我有用。
<system.web>
<pages validateRequest="false" />
</system.web>
它应该适用于 Asp.net 2.0 到 3.5。
更新:甚至可以运行到 .net 4.5
更新:您还可以尝试在页面级别而不是整个网站上验证请求。只是想让读者选择最好的方式。感谢 DVD 指出这一点。
【讨论】:
使用 requestValidationMode="2.0" 并仅在需要的页面上关闭验证 (ValidateRequest="false") 会更好的安全性,而不是关闭整个站点的验证。 @dvdnhm,伙计,问题是如何修复错误......无论是一页还是整个网络。它可以以一种或另一种方式完成。 @BradleyDotNET (slow_clap) 为什么有人会在不告诉问题的情况下将其标记为负面?【参考方案4】:我创建了一个表 article,其中包含 articleId 和 article_content 列。我还为 article_content 列使用了 html 编辑器。当我试图保存时,我得到了同样的错误。通过在类的 article_content 属性中添加 [AllowHtml] 解决了这个问题。
[AllowHtml]
[Required]
public string article_content get; set;
不要忘记使用 System.Web.Mvc 包含命名空间。更多详情:http://www.infinetsoft.com/Post/A-potentially-dangerous-Request-Form-value-was-detected-from-the-client/1246
【讨论】:
【参考方案5】:如果适合您的需要,您可以在发送到服务器之前使用 javascript 对值进行编码
见this answer
【讨论】:
【参考方案6】:“从客户端检测到有潜在危险的 Request.Form 值”..
1) 在web.config
文件中设置httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"
2) 在 web.config 文件的侧页标签中设置validateRequest="false"
<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="<,>,\"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
<system.web>
【讨论】:
【参考方案7】:我在将一些电子邮件模板从 aspx 页面发送到代码后面时遇到了同样的问题......
所以我尝试通过添加来解决这个问题
<httpRuntime requestValidationMode="2.0" />
在我的enter code here
` 下的网络配置中,但这对我没有帮助,除非我放了
ValidateRequest="false"
aspx 页面的 page 指令中的属性。
【讨论】:
【参考方案8】:有 3 个选项可以消除此错误。
-
在页面指令中设置
validateRequest="false"
。
在 web.config 文件中设置 validateRequest="false"
。
如果您使用的是 DotNet 4.0,请在 web.config 中设置 requestValidationMode="2.0"
结帐this link 了解更多信息。
【讨论】:
以上是关于从客户端检测到潜在危险的 Request.Form 值的主要内容,如果未能解决你的问题,请参考以下文章
从客户端中检测到有潜在危险的 request.form值[解决方法]
如何处理“从客户端检测到潜在危险的 Request.Form 值”?