是否可以使用HttpModule删除一些帖子数据?

Dav*_*ave 5 asp.net asp-classic

我正在将旧的经典asp网站转换为asp.net.

该应用程序基本上是给定用户集的工具集的扩展,但它由外部供应商托管.

为了执行到这个应用程序的无缝传输,它发布了一些xml数据,这些数据触发了"潜在危险的Request.Form值".我知道我可以关闭validateRequest标志,但我宁愿不这样做.

我写了一个httpmodule来获取这些数据并使用它来验证用户,是否可以使用相同的模块或不同的模块来删除帖子数据中的这些"坏"值,然后才能"验证"?

否则,如果这些想法都不起作用,我愿意接受其他建议.

MyI*_*hin 8

是.以下类实现IHttpModule接口以及在HttpRequestValidationException检查发生之前将触发的寄存器和事件.它检查请求是否为POST,并且"testinput"不为null,然后HTML对其进行编码.Class需要在Web.config中注册为httpModule.

类...

using System;
using System.Collections.Specialized;
using System.Reflection;
using System.Web;

public class PrevalidationSanitizer : System.Web.IHttpModule
{
    private HttpApplication httpApp;

    public void Init(HttpApplication httpApp)
    {
        this.httpApp = httpApp;
        httpApp.PreRequestHandlerExecute += new System.EventHandler(PreRequestHandlerExecute_Event);
    }

    public void Dispose() { }

    public void PreRequestHandlerExecute_Event(object sender, System.EventArgs args)
    {
        NameValueCollection form = httpApp.Request.Form;

        Type type = form.GetType();

        PropertyInfo prop = type.GetProperty("IsReadOnly", BindingFlags.Instance 
            | BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);

        prop.SetValue(form, false, null);

        if (httpApp.Request.RequestType == "POST" != null 
            && httpApp.Request.Form["testinput"])
                httpApp.Request.Form.Set("testinput"
                    , httpApp.Server.HtmlEncode(httpApp.Request.Form["testinput"]));
    }
}
Run Code Online (Sandbox Code Playgroud)

web.config条目...

<system.web>
  <httpModules>
    <add type="PrevalidationSanitizer" name="PrevalidationSanitizer" />
...
Run Code Online (Sandbox Code Playgroud)