HP Fortify -- 注释方法参数

Posted

技术标签:

【中文标题】HP Fortify -- 注释方法参数【英文标题】:HP Fortify -- annotating method parameters 【发布时间】:2015-08-12 07:13:28 【问题描述】:

我正在尝试消除 Java 应用程序的 HP Fortify 扫描中的误报。

此方法会导致“隐私违规”问题(PrintWriter 是一个 servlet 响应)

 private void writeOutput(String passwordRules, PrintWriter out) 
      ...
      out.print(passwordRules);
      ...
 

这是因为 Fortify 遵循命名约定,决定 passwordRules 包含私有数据。但我的passwordRules 不是私人数据——它包含诸如“最少 8 个字符”之类的内容。

我可以通过更改变量的名称来消除错误。但是原则上我不想为了源代码分析器的利益而损害我的代码的可读性。

我希望这能解决它:

 private void writeOutput(@FortifyNotPassword String passwordRules, PrintWriter out) ...

但是,注释似乎不是针对该上下文编写的:

 The annotation @FortifyNotPassword is disallowed for this location.

我试过了:

 private void writeOutput(String passwordRules, PrintWriter out) 
      ...
      @FortifyNotPassword String rules = passwordRules;
      out.print(rules);
      ...
 

... 但这并不能消除误报。 (而且它损害了我不降低代码可读性的原则)。

我也用@FortifyNotPrivate 尝试了上述方法,结果相同。

那么正确的做法是什么?

【问题讨论】:

糟糕!错过了那一段。道歉。 【参考方案1】:

Fortify 为您提供了两种处理这种情况的方法:1) 隐藏问题,或 2) 隐藏问题。您选择哪一种取决于您认为最适合您的方式。

已抑制的问题。如果您确定特定漏洞不存在且永远不会存在问题,则可以将问题标记为已抑制。您可能还希望禁止针对可能不是高优先级或直接关注的特定类型问题的警告。例如,您可以抑制已修复的问题,或者在您的情况下不打算修复的问题。被抑制的问题不包括在问题面板中显示的组总数中。当您想完全消除对问题的认识时,这种方法可能是最好的。

隐藏的问题。您可以暂时隐藏一组问题,以免在您专注于其他地方时分心。例如,您可以隐藏除分配给您的问题之外的所有问题。被指派解决您隐藏在视图中的问题的个人仍然可以访问它们。问题面板中显示的组总数包括隐藏的问题。如果您在文件夹列表中发现要隐藏或指向另一个文件夹的问题,您可以使用过滤器向导创建新过滤器。过滤器向导显示所有符合过滤器条件的属性。文档 HP_Fortify_Audit_Workbench_User_Guide_4.30 的第 29 页;此文档与您的 Fortify 程序文件一起提供。如果您希望其他人意识到这些问题,即使您忽略它,这种选择可能更可取。

已删除问题。此替代方案与您的情况并不特别相关,但为了完整起见,我将其呈现。随着时间的推移对一个项目进行多次扫描,问题通常会得到修复或过时。在合并扫描结果时,静态代码分析器将在先前扫描中发现但在最近的 SCA 分析结果中不再明显的问题标记为已删除。已删除的问题不包括在问题面板中显示的组总数中。由于您不打算“修复”此问题,因此它不会成为“已删除的问题”。

要显示或隐藏抑制、隐藏和删除的问题,请使用选项菜单。可见性过滤器显示或隐藏问题。

【讨论】:

谢谢,但我已经知道如何手动抑制/隐藏问题。这个问题专门关于注释Java,以便不仅抑制误报,而且不存在误报。 Fortify 报告说明了有多少被压制的问题,并警告说其中大量是可疑的。 抑制和隐藏是根据 Fortify 的“书籍解决方案”。使用“凭据”之类的密码同义词怎么样? 我不知道您所说的“图书解决方案”是什么意思。注释是一种受支持的技术——请参阅 Fortify 目录中的Samples/advanced/java_annotations。 @FortifyNotPassword 适用于局部变量和字段——我只想对方法参数做同样的事情。 相信我,我已经压制了 很多 个问题,并将其他问题标记为“不是问题”,但我认为这不是长期可持续的。人类很容易忽视真正的问题。 “正确的做法”是正确注释 Fortify 错误分类的变量,注释未污染数据的方法,并使用正确代表您的攻击面的规则集。 我会尝试“凭证” - 这是一个实用的技巧,可能有效但不是必需的。我猜 Fortify 的规则也会说包含“凭据”的变量是敏感的——我会报告回来。

以上是关于HP Fortify -- 注释方法参数的主要内容,如果未能解决你的问题,请参考以下文章

HP Fortify:ASP.NET 不良做法:存储在会话中的不可序列化对象

HP Fortify Cookie头操作错误

HP fortify XML 外部实体注入

HP Fortify 路径操作验证规则

HP Fortify 规则抑制属性 C#

81.魔法方法有参数的__init__()