2010-07-15 90 views
4

我的公司要求我们的ASP.NET代码在发布代码之前通过Fortify 360扫描。我们使用AntiXSS来净化HTML输出。我们也验证输入。不幸的是,他们最近更改了Fortify正在使用的“模板”,现在它将所有AntiXSS调用标记为“不良验证”。这些调用正在做一些事情,比如AntiXSS.HTMLEncode(sEmailAddress)。Fortify和AntiXSS

任何人都知道什么会满足Fortify?很多标记输出的地方都是从数据库来的,而从来没有从用户那里得到,所以如果HTMLEncode不够安全,我们不知道是什么!

+6

哦,亲爱的,这是自动化工具的问题 - 误报。我建议使用Fortify记录支持票 - AntiXSS不应该用这种方式标记。我现在是AntiXSS的所有者,所以如果Fortify想要有人交谈,那么你可以把它们指向我,bdorrans @ thatbigborgdomainname :) – blowdart 2010-07-15 14:45:03

+0

我们确实这样做了,他们说AntiXSS还不够好。我们问什么是,我们还在等待答案。我想看看其他人如何绕过这个BS。 – 2010-07-15 14:57:33

+0

哈,很好。虽然措辞很有趣,但若想更多地了解它,AntiXSS当然不会被验证,它只需要您提供并编码它。也许它在这之前期待一些验证。 – blowdart 2010-07-15 16:16:07

回答

1

我们找到了解决方案。相信与否,这会使Fortify360接受该代码。

string sSafeVal = Regex.Replace(sValue, @"[\x00-\x1F\x7F]+", ""); 
Response.Write AntiXSS.HTMLEncode(sSafeVal); 

所以,如果AntiXSS.HTMLEncode单独失败,替换不可打印的字符的作品。不要以为HTMLEncode会这样做。我猜他们只是触发了Regex.Replace,我想任何模式都可以工作。

7

我是Fortify安全研究小组的成员,对于这个问题一直困扰着你,我很抱歉。我们在提出这类问题方面做得并不好。我认为问题的一部分是类别名称 - 我们并不是想说验证机制有什么问题,只是我们无法确定它是否适用于这种情况。

换句话说,我们不知道什么是适合您的特定环境的正确验证。出于这个原因,我们不认可任何HTML编码函数作为对开箱即用的XSS进行验证,即使是在Microsoft的AntiXSS库中也是如此。

至于什么是正确的解决方案是,如果您使用HtmlEncode输出到HTML页面的正文的用户名,您的原始代码是好的。如果在URL中使用编码的用户名,则可能容易受到XSS的影响。在Fortify,当我们在自己的代码中发现类似的问题时,如果验证与上下文匹配,我们将其标记为“不是问题”。

我们意识到围绕这些问题存在的问题不断调整我们的规则,使其更加精确和易于理解。我们每三个月发布一次新规则,并期望在即将发布的版本中进行一些更改。对于第四季度,我们计划将这些问题分解为未充分验证(针对黑名单编码和其他弱验证方案)和上下文敏感验证(您看到的问题类型)。请让我们知道,如果我们可以帮助更多。

(A链接的HTML为什么编码不解决所有问题的OWASP解释: http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F

+2

对不起,这只是使用扫描引擎类型的自动工具问题的一个完美例子。 AntiXss是所有上下文的正确解决方案,OWASP文章尽管 - 它明确指出,虽然* HTML *编码不够,按照正确的上下文**编码是** - 这些由AntiXss提供。问题在于Fortify无法检测到正确的上下文,并且由于无法找出使用哪种方法(如您所述)。 – AviD 2010-11-04 14:20:33

+0

因此,使用* correct *编码方法甚至不是“上下文敏感验证”,它甚至不应该浮在首位。只有根据上下文使用*错误*方法才适合该类别。 – AviD 2010-11-04 14:21:11

+0

当我在惠普使用Fortify(偶然是微软的AntiXSS)时,“我不是问题”就是我所做的。而且,太多的误报也是自动化工具交易的一部分。 – gmaran23 2013-12-22 15:03:26

4

fd_dev,我想补充一点,你不应该集中在挤压你的代码,以适应通过静态分析铁圈。如果您有资格并确信该结果不适用,请使用Fortify GUI工具记录评论并解决问题。

如果您不确定,请稍微截图并发送给Fortify技术支持。他们非常有资格就如何解读Fortify安全调查结果向您提供建议。

blowdart是现货。请参阅http://www.schneier.com/blog/archives/2008/05/random_number_b.html以了解在发现静态分析结果时不了解代码的用途以及查找结果背后的原因/机制后可能发生的情况。 (总之,你可能会使代码更糟糕,而不是更好) - :