c# - 我对使用网页/WebMatrix 与 XSS 的 ASP.NET 请求验证有多大的信任度?

标签 c# security xss webmatrix asp.net-webpages

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

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

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

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

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

我的问题是:我能在多大程度上信任这个验证者?我知道它会检测标签(从逻辑上讲,这个部分 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"

好像出错了。不过,我确信它所做的检查比这更多,而且我很想看看在请求验证器的眼中,什么符合和不符合标记。

最佳答案

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

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

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

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

关于c# - 我对使用网页/WebMatrix 与 XSS 的 ASP.NET 请求验证有多大的信任度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986918/

相关文章:

c# - 将逐个元素添加到 ListView 而不阻塞 UI

C# 正则表达式 : Get group names?

django - 限制用户只能编辑自己的信息

security - BCryptPasswordEncoder的密码长度限制是否超过72个字符?

php - Form将数据存储在mysql数据库中——XSS漏洞

javascript - Javascript 如何处理连字符?

c# - Saber 特殊字符

c# - 使用 System.Net.HttpClient 上传时如何跟踪进度?

security - 通过 SSL 的 RabbitMQ

JavaScript framekiller 和 XSS 漏洞