Dav*_*ave 5 asp.net asp-classic
我正在将旧的经典asp网站转换为asp.net.
该应用程序基本上是给定用户集的工具集的扩展,但它由外部供应商托管.
为了执行到这个应用程序的无缝传输,它发布了一些xml数据,这些数据触发了"潜在危险的Request.Form值".我知道我可以关闭validateRequest标志,但我宁愿不这样做.
我写了一个httpmodule来获取这些数据并使用它来验证用户,是否可以使用相同的模块或不同的模块来删除帖子数据中的这些"坏"值,然后才能"验证"?
否则,如果这些想法都不起作用,我愿意接受其他建议.
是.以下类实现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)
| 归档时间: |
|
| 查看次数: |
2820 次 |
| 最近记录: |