禁用Request.Validation / Encode URL

时间:2012-05-03 16:49:25

标签: c# asp.net

我有一个简单的asp.net Web表单页面,它只是拦截http请求,从查询字符串中提取参数,进行一些检查并根据参数重定向请求。

最近,我在日志中看起来似乎有HttpRequestValidationException错误。这是因为我们所接受的网址没有编码,我们将Request.Validation设置为true。

现在,我想停止收到此错误,但我仍然希望免受注入攻击。我以为我可以在使用它之前关闭Request.Validation并对URL进行简单编码。这是有效的解决方案吗?另外,我应该使用什么类型的编码? HTML编码或网址编码?我猜测HTML编码不能防止javascript或sql注入,对吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

现在,我想停止收到此错误

你有什么理由不想这样做吗?这很好 - 它告诉你一个危险的请求被抓住了。如果你想阻止这些击中日志,为什么不吞下这个例外呢?

这可以解决问题(Global.asax):

void Application_Error(object sender, EventArgs e)
{

    Exception exc = Server.GetLastError();
    if(exc.GetType() == typeof(HttpRequestValidationException))
    {
        //ignore and don't write to log
    }

}

这还有一个优点,就是仍然记录所有其他异常。