繁体   English   中英

一个潜在危险的Request.QueryString —如何在不关闭安全功能的情况下进行预防

[英]A potentially dangerous Request.QueryString — How to prevent without turning off safety features

当我执行带有查询字符串中编码的一些数据的帖子时,我收到此消息。 我已经在网上浏览了所有解决方案,都是关于关闭验证的,对我来说似乎是倒退的。 我想做的就是修改查询字符串,这样它就不会首先触发验证。

查询字符串使用以下javascript进行urlEncoded:

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

'Id'只是一个整数,因此c和p参数是唯一可能导致此问题的参数,并且它们都经过URI编码。

是什么导致了此错误?除了uri编码之外,我还能做些什么来防止投诉? 我不喜欢关闭安全功能。 开车时系好安全带是明智的。

这是一条安全带,仅供未通过驾驶考试的人员使用。 如果输出的编码正确,则“潜在危险”查询字符串值不再是危险的。

例如,如果将字符"输出到HTML,则应将其编码为" ,或者如果将字符'输出到JavaScript,则应将其编码为\\x27

ASP.NET请求验证仅在您未正确编码输出代码时才保护您的代码,此外,它仅保护通过启用了请求验证的网站输入的值。 来自任何其他来源(例如共享数据库,另一个应用程序或外部API)的任何输入都不会通过请求验证来验证。 这就是为什么我会编码您的应用程序以处理正确的输出编码的原因。 如果stackoverflow.com阻止了潜在危险的输入,那么人们将不可能在他们的帖子中编写如下代码: <script>alert('example');</script> ,但是具有正确的输出编码,如您所见这很安全。

请查看我有关ASP.NET安全性的文章 (A3跨站点脚本(XSS)部分)。

另请参阅OWASP XSS预防备忘单

ASP.NET团队不希望您依赖“ RequestValidation”,因此可以将其关闭(这是拐杖,会给人一种虚假的安全感,因为它并不总是能达到最高速度)。

有关为什么可以这样做以及您应该怎么做的信息,请观看从11:10开始的视频 实际上,我建议您观看整个视频。

没错,大多数“修复”都告诉您关闭验证,因此很难找到除此以外的其他东西。 我认为您将不得不仅针对该请求将其关闭,然后手动对其进行验证。 根据Microsoft,您可以为这样的请求禁用它:

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/zh-cn/library/hh882339(v=vs.110).aspx

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM