我有一个简单的asp.net Web表单页面,它只是拦截http请求,从查询字符串中提取参数,进行一些检查并根据参数重定向请求。
最近,我在日志中看起来似乎有HttpRequestValidationException错误。这是因为我们所接受的网址没有编码,我们将Request.Validation设置为true。
现在,我想停止收到此错误,但我仍然希望免受注入攻击。我以为我可以在使用它之前关闭Request.Validation并对URL进行简单编码。这是有效的解决方案吗?另外,我应该使用什么类型的编码? HTML编码或网址编码?我猜测HTML编码不能防止javascript或sql注入,对吗?
提前致谢。
答案 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
}
}
这还有一个优点,就是仍然记录所有其他异常。