2014-03-06 23 views
0

我收到此消息时,我执行与查询字符串中编码的一些数据的职位。我浏览过这个网页,所有的解决方案都是关闭验证 - 这对我来说似乎很落后。我想要做的是修改查询字符串,以便它不首先触发验证。有潜在危险的Request.QueryString - 如何防止不关闭安全功能

查询字符串url编码与此javascript:

var qs = 'i=' + id+ '&c=' + encodeURIComponent(c) + '&' + 'p=' + encodeURIComponent(p); 

“ID”只是一个整数,所以C和P参数都可能造成这种唯一的,而且他们都是URIencoded。

是什么原因导致这个错误,并且什么,除了URI编码,我可以做些什么来防止投诉? 我不喜欢关闭安全功能。驾驶时戴上安全带是明智的。

回答

2

这是一个安全带,只适用于没有通过驾驶考试的人。如果输出编码正确,则“潜在危险”的查询字符串值不再危险。

例如,如果字符"输出到HTML该应编码为",或者如果字符'被输出到的JavaScript那么它应该被编码为\x27

ASP.NET请求验证仅保护您的代码,如果你没有正确编码输出,而且它仅仅保护那些已经通过与索取的网站启用验证输入值。任何其他来源的输入(例如共享数据库,其他应用程序或外部API)都不会通过请求验证进行验证。这就是为什么我会编写代码来处理正确的输出编码。如果stackoverflow.com阻止了潜在的危险输入,那么人们不可能在他们的帖子中编写像这样的代码:<script>alert('example');</script>,但输出编码正确,因为您可以看到这是安全的。

看看我的上ASP.NET Security(A3-跨站点脚本(XSS)部分)后。请参阅OWASP XSS Prevention Cheat Sheet

0

你说得对,最“修复”这告诉你关闭验证,因此它是一种很难找到比其他东西。我认为你将不得不关闭该请求,然后手动验证它。据微软称,你可以像这样的请求,将其禁用:

Request.Unvalidated("userInput"); // Validation bypassed 
Request.Unvalidated().Form["userInput"]; // Validation bypassed 

If you disable request validation, you must manually check the unvalidated user input for potentially dangerous input

看到这篇文章:http://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx

祝您好运!

1

的ASP.NET团队不希望你依靠“RequestValidation”,所以它是确定将其关闭(这是一个拐杖,让安全的错觉,因为它并不总是加快速度)。

对于信息为什么这行,哪些是你应该做的,而不是,看这个video开始11:10。我真的会推荐观看整个视频。