4

我已经阅读(并且正在接受)这样一个事实,即没有任何解决方案可以 100% 有效地抵御 XSS 攻击。似乎我们所能期望的最好的结果就是阻止“大多数” XSS 攻击途径,并且可能有良好的恢复和/或法律计划。最近,我一直在努力寻找一个好的参考框架,以确定什么应该和不应该是可接受的风险。

阅读完 Mike Brind 的这篇文章后(一篇非常好的文章,顺便说一句):

http://www.mikesdotnetting.com/Article/159/WebMatrix-Protecting-Your-Web-Pages-Site

我可以看到,如果您需要未经验证的用户输入,使用 html sanitizer 也可以非常有效地降低 XSS 攻击的途径。

但是,就我而言,情况恰恰相反。我有一个(非常有限的)带有 Web 界面的 CMS。用户输入(经过 URL 编码后)被保存到 JSON 文件中,然后在可查看页面上提取(解码)该文件。我在这里阻止 XSS 攻击的主要方法是,您必须成为少数注册成员之一才能完全更改内容。通过记录注册用户、IP 地址和时间戳,我觉得这种威胁基本上得到了缓解,但是,我想使用一个 try/catch 语句来捕获由 asp.net 的默认请求验证器生成的 YSOD 以及之前的提到的方法。

我的问题是:我可以信任这个验证器多少?我知道它会检测标签(从逻辑上讲,这个部分 CMS 没有设置为接受任何标签,所以如果检测到任何标签,我可以接受抛出错误)。但是这个天生的验证器还能检测到什么(如果有的话)?

我知道 XSS 可以在没有触及尖括号(或完整标签,就此而言)的情况下实现,因为 html 源可以在简单地添加一个额外的之后从客户端计算机保存、编辑和随后运行“onload='BS XSS ATTACK'”到一些随机标签。

只是好奇如果一个人确实想将它用作其反 XSS 计划的一部分(显然使用 try/catch,因此用户看不到 YSOD),该验证器的可信度有多少。这个验证器是否相当不错但并不完美,或者这只是一个“最好的猜测”,即任何有足够知识了解 XSS 的人都会有足够的知识来证明这个验证并不重要?

- - - - - - - - - - - -编辑 - - - - - - - - - - - - - -----

在这个网站...: http: //msdn.microsoft.com/en-us/library/hh882339 (v=vs.100).aspx

...我为网页找到了这个示例。

var userComment = Request.Form["userInput"]; // Validated, throws error if input includes markup

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

Request.QueryString["userPreference"]; // Validated
Request.Unvalidated().QueryString["userPreference"]; // Validation bypassed;

根据评论:“//验证,如果输入包含标记则抛出错误”我认为如果字符串包含任何被认为是标记的内容,验证器就会抛出错误。现在问题(对我来说)真的变成了:什么是标记?通过测试,我发现单个尖括号不会引发错误,但是如果有任何东西(我到目前为止测试过)出现在尖括号之后,例如

"<l"

似乎出错了。但是,我确信它会做更多的检查,而且我很想看看在请求验证器的眼中什么可以作为标记,什么不可以作为标记。

4

1 回答 1

2

我相信 ASP.NET 请求验证是相当值得信赖的,但您不应该单独依赖它。对于某些项目,我将其启用以提供额外的安全层。一般来说,最好使用经过广泛测试/使用的解决方案,而不是自己制作一个。如果“YSOD”(或自定义错误页面)成为我的客户的问题,我通常只是禁用页面的 .NET 请求验证功能。

一旦这样做,我会仔细确保我的输入是经过消毒的,但更重要的是我的输出是经过编码的。因此,在我将用户输入的(或 Web 服务等——来自第三方的任何内容)内容推送给用户的任何地方,它都会被包装在 Server.HtmlEncode() 中。这种方法多年来一直运作良好。

您提供的 Microsoft 文档的链接非常好。要回答关于什么被认为是标记(或什么应该被认为是标记)的问题,请戴上你的黑客帽子并查看 OWASP XSS Evasion Cheat Sheet。

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#HTML_entities

于 2013-02-21T15:20:15.087 回答