我已经阅读(而且即将达成协议)事实上,没有解决方案可以100%有效地抵御XSS攻击。看起来,我们希望的最好的办法就是停止“最”XSS攻击途径,并且可能会有很好的恢复和/或合法计划。最近,我一直在努力寻找一个良好的参考框架,以确定哪些不应该是可接受的风险。我可以信任多少ASP.NET Web页面/ WebMatrix与XSS请求验证?
看了这篇文章,由Mike Brind后(一篇很好的文章,顺便说一句):
http://www.mikesdotnetting.com/Article/159/WebMatrix-Protecting-Your-Web-Pages-Site
我可以看到,使用HTML清洁剂,也可以在降低XSS的途径非常有效如果您需要用户输入未验证的攻击。
但是,在我的情况下,情况恰恰相反。我有一个(非常有限)CMS与Web界面。用户输入(被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"
似乎错误。然而,我确信它会做更多的检查,而且我希望看到请求验证程序眼中的内容是否有资格作为标记。
@All,我也发现了这个非常有用的链接(不回答原来的问题,但可以帮助其他未来的观众为防止对XSS一般)。 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting))_Prevention_Cheat_Sheet – VoidKing 2013-02-20 19:43:35
我不完全明白你的观点。如果输入验证失败,您可以设置自定义错误页面让用户访问。你所说的“ysod”实际上只是用于开发,而不是用于生产,默认情况下,IIS和web.config配置为不显示它用于发布配置。 – Candide 2013-02-21 15:28:59
@Cideide是的,我明白你的意思了,当我想到它时,我不必使用try/catch。只是这种方法适用于我设置的当前页面。我也知道(除非在web.config中另行通知)YSOD不会向远程机器显示代码,但它仍然很丑,我不希望用户以这种方式看到错误(即,在YSOD上屏幕)。 – VoidKing 2013-02-21 18:25:08