当我使用查询字符串中编码的一些数据执行发布时,我收到此消息。我浏览过这方面的网页,所有的解决方案都是关于关闭验证——这对我来说似乎是倒退的。我想要做的是修改查询字符串,以便它不会首先触发验证。
查询字符串使用以下 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 Security 上的帖子(A3-跨站脚本 (XSS) 部分)。
关于javascript - 潜在危险的Request.QueryString——如何在不关闭安全功能的情况下预防,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22232107/