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

1cklez4t  于 2023-04-20  发布在  jQuery
关注(0)|答案(8)|浏览(202)

我有这个问题。我已经尝试了一切。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 width="100%">
                        <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();
        }
    }
}

要运行代码..添加引用到AjaxControltoolkit.dll,然后运行,你会看到文本区域被XML填充。点击取消按钮,这会导致错误。请任何人都可以帮助我?

neekobn8

neekobn81#

使用

<httpRuntime requestValidationMode="2.0" />

在你的web.config中(保留你已经在那个元素上的任何属性,如果它已经在那里的话)。
当然,一定要确保你采取必要的措施来防止真正危险的请求,现在它不是为你做的。
编辑:一个很好的方法是创建自己的类,从RequestValidator派生,并使用4.0的行为,但用它作为检查的类。

sxissh06

sxissh062#

这里有可能帮助你的解决方案。为此做一个服务器端配置设置。如果你想允许HTML元素作为项目中所选页面的输入,请设置此页面属性。

<%@ Page ValidateRequest="false" %>

如果你想在你的项目中的所有页面中进行修改,请在Web.config文件中添加这个标签。
如果你使用的是.Net 4.0,那么你需要在Web.config文件中再做一个修改。

<httpRuntime requestValidationMode="2.0" />

下面是.Net4.0中所有页面的不验证请求的配置

<configuration>
  <system.web>
     <httpRuntime requestValidationMode="2.0" />
  </system.web>
  <pages validateRequest="false">
  </pages>
</configuration>
f0brbegy

f0brbegy3#

好吧,人们只谈论Asp.net4.0 ...我想我们也需要解决其他版本。今天,当我用TinyMCE替换我的AjaxToolkit编辑器时,我遇到了同样的问题,并且在回发中我发现了同样的问题。

“从客户端检测到潜在危险的请求。表单值”..

所以我在我的webconfig中使用了这一行,它对我很有效。

<system.web>
    <pages validateRequest="false" />
</system.web>

它应该可以在Asp.net2.0到3.5之间运行。

**更新:**甚至可以升级到.net 4.5
**更新:**您也可以尝试在页面级别而不是整个网站上验证请求。只是想让读者选择最佳方式。感谢DVD指出这一点。

6ojccjat

6ojccjat4#

我用articleId和article_content列创建了一个表article。我还使用了article_content列的html编辑器。当我试图保存时,我得到了同样的错误。它通过将[AllowHtml]添加到类中的article_content属性来解决。

[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

olmpazwi

olmpazwi5#

如果需要,可以在发送到服务器之前使用JavaScript对值进行编码
看到这个答案

9avjhtql

9avjhtql6#

“从客户端检测到潜在危险的请求。表单值”..
1)在web.config文件中设置httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"
2)在web.config文件中设置validateRequest="false" in side pages标记

<system.web>
    <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="&lt;,&gt;,\"/>
 <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" validateRequest="false"/>
<system.web>
erhoui1w

erhoui1w7#

我面临着同样的问题,而发送一些电子邮件模板从aspx网页代码背后。。。
所以我试着解决这个问题

<httpRuntime requestValidationMode="2.0" />

在我的网络配置下enter code here `,但这并没有帮助我,除非我把

ValidateRequest="false"

属性在aspx页面的page指令中。

1rhkuytd

1rhkuytd8#

有3个选项可以删除此错误。
1.在页面指令中设置validateRequest="false"
1.在web.config文件中设置validateRequest="false"
1.如果您使用的是DotNet 4.0,请在web.config中设置requestValidationMode="2.0"
查看this link了解更多信息。

相关问题