从jquery post调用asp.net页面发送html标记时,从客户端检测到一个潜在危险的Request.QueryString值

Shy*_*yju 40 asp.net security ajax jquery asp.net-ajax

我正在使用jQuery对一个ASP.NET页面进行ajax调用,该页面充当我的ajax服务器页面,用于保存我在查询字符串中发送给它的数据.在ASP.NET页面中,当我尝试读取查询字符串时,我收到此错误:

A potentially dangerous Request.QueryString value was detected from the client...
Run Code Online (Sandbox Code Playgroud)

我已经ValidateRequest="false"在我的页面中设置了 .不想为所有页面设置它.所以它在页面级别而不是配置级别:

  var content = "<h3>Sample header</h3><p>sample para</p>"
  content = encodeURIComponent(content);
  var url = "../Lib/ajaxhandler.aspx?mode=savecontent&page=home&ltxt=" + content;

     $.post(url, function (data) { 
       //check return value and do something
   });
Run Code Online (Sandbox Code Playgroud)

在我的asp.net页面中:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ajaxhandler.aspx.cs" ValidateRequest="false" Inherits="MyProject.Lib.ajaxhandler" %>
Run Code Online (Sandbox Code Playgroud)

但是当我发送纯文本而不是html标记时,它工作正常.

For*_*lon 36

如果这是ASP.NET 4,有一个重大更改ValidateRequest.有关更多信息,请参阅此StackOverflow问题requestValidationMode.


Jim*_*Aho 8

对此已有一个很好的答案,在这里我将提供信息,这样您就不必点击链接.

运行ASP.NET 4.0时,需要在web.config文件中设置以下内容RequestValidationMode="2.0".

这个属性是什么?

一个值,指示将使用哪种特定于ASP.NET版本的验证方法.默认值为4.0.

那么可能的价值是什么?

  • 4.0(默认值).HttpRequest对象在内部设置一个标志,指示每当
    访问任何HTTP请求数据时都应触发请求验证.这保证了在请求 期间访问
    诸如cookie和URL之类的数据之前触发请求验证
    .将 忽略
    配置文件中的pages元素(如果有)或
    单个页面中的@ Page 指令的请求验证设置.

  • 2.0.仅对页面启用请求验证,而不是对所有HTTP请求启用.此外,配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求验证设置用于确定要验证的页面请求.

从这个msdn网站引用的信息.