用户控件从客户端检测到潜在危险的Request.QueryString值

时间:2015-02-03 14:47:10

标签: c# asp.net

我有一个用户控件,我传入的查询字符串.net似乎认为很危险..我已经放入了我的web.config

<httpRuntime requestValidationMode="2.0" enableVersionHeader="false" maxUrlLength="10999" maxQueryStringLength="2097151"/>

<security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>

我的用户控制是:

  <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Member.ascx.cs" Inherits="DOM.Umbraco.Web.usercontrols.Members" %>

但仍然没有希望..我怎么能得到这个以允许这个查询字符串?

由于 DOM

2 个答案:

答案 0 :(得分:0)

您可以使用此web.config设置禁用请求验证

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

考虑到根本没有验证可能导致安全问题。您需要将内置验证替换为某些自定义代码以从客户端清除数据。

如果您只想将此设置限制为使用用户控件的页面,您可以使用此页面指令

<@ Page validateRequest="false" %>

答案 1 :(得分:0)

覆盖请求验证程序并允许您需要的字符。要小心,如果要重新显示数据,它将包含原始内容,这可能是危险的。即脚本标签

public class CustomRequestValidator : System.Web.Util.RequestValidator
{
    protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex)
    {
        validationFailureIndex = 0;

        if (requestValidationSource == RequestValidationSource.Form)
        {
            value = value.Replace("<", "").Replace(">", "");
        }
        return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
    }
}