我是 Fortify 安全研究小组的成员,对于这个问题给您造成的困惑,我深表歉意。我们在提出这类问题方面做得不是很好。我认为问题的一部分在于类别名称——我们并不是要说验证机制有什么问题,只是我们无法判断它是否适合这种情况的验证。
换句话说,我们不知道对于您的特定上下文正确的验证是什么。出于这个原因,我们不承认任何 HTML 编码函数可以验证开箱即用的 XSS,即使是 Microsoft 的 AntiXSS 库中的那些。
至于正确的解决方案是什么,如果您使用 HtmlEncode 将用户名输出到 HTML 页面的正文,那么您的原始代码就可以了。如果在 URL 中使用了编码的用户名,则它可能容易受到 XSS 攻击。在 Fortify,当我们在自己的代码中发现类似问题时,如果验证与上下文匹配,我们将其标记为“不是问题”。
我们意识到围绕这些问题的问题不断调整我们的规则以使其更加精确和易于理解。我们每三个月发布一次新规则,并希望在即将发布的版本中进行一些更改。对于第四季度,我们计划将问题分为验证不足(用于将编码和其他弱验证方案列入黑名单)和上下文敏感验证(您看到的问题类型)。如果我们能提供更多帮助,请告诉我们。
(OWASP 解释为什么 HTML 编码不能解决所有问题的链接:
http ://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F )