gpt4 book ai didi

asp.net - 是否可以使用 HttpModule 删除一些发布数据?

转载 作者:行者123 更新时间:2023-12-01 22:07:27 24 4
gpt4 key购买 nike

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

该应用程序基本上是针对给定用户组的工具集的扩展,但它托管在外部供应商处。

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

我已经编写了一个httpmodule,它获取这些数据并使用它来验证用户身份,是否可以使用相同的模块或不同的模块来删除发布数据中的这些“坏”值数据已“验证”?

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

最佳答案

是的。以下类实现 IHttpModule 接口(interface)并注册和在 HttpRequestValidationException 检查发生之前触发的事件。它检查请求是否为 POST 并且“testinput”不为 null,然后对其进行 HTML 编码。该类需要在您的 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"]));
}
}

web.config 条目...

<system.web>
<httpModules>
<add type="PrevalidationSanitizer" name="PrevalidationSanitizer" />
...

关于asp.net - 是否可以使用 HttpModule 删除一些发布数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com