HP Fortify - 注释方法参数

sli*_*lim 7 java fortify

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

此方法导致"隐私冲突"问题(PrintWriter是一个servlet响应)

 private void writeOutput(String passwordRules, PrintWriter out) {
      ...
      out.print(passwordRules);
      ...
 }
Run Code Online (Sandbox Code Playgroud)

这是因为Fortify遵循命名约定,以决定passwordRules包含私有数据.但我passwordRules不是私人数据 - 它包含"最少8个字符"之类的内容.

我可以通过更改变量的名称来消除错误.但是原则上我不想为了源代码分析器的好处而牺牲我的代码的可读性.

我希望这能解决它:

 private void writeOutput(@FortifyNotPassword String passwordRules, PrintWriter out) ...
Run Code Online (Sandbox Code Playgroud)

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

 The annotation @FortifyNotPassword is disallowed for this location.
Run Code Online (Sandbox Code Playgroud)

我试过了:

 private void writeOutput(String passwordRules, PrintWriter out) {
      ...
      @FortifyNotPassword String rules = passwordRules;
      out.print(rules);
      ...
 }
Run Code Online (Sandbox Code Playgroud)

......但这并没有消除假阳性.(它违反了我不使代码不易读的原则).

我也尝试了上面的@FortifyNotPrivate,结果相同.

那么这样做的正确方法是什么?

Wal*_*ser 3

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

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

隐藏的问题。您可以暂时隐藏一组问题,以避免在您专注于其他事情时分心。例如,您可以隐藏除分配给您的问题之外的所有问题。指定负责解决您隐藏在视图中的问题的人员仍然可以访问这些问题。问题面板中显示的组总数包括隐藏的问题。如果您在文件夹列表中发现想要隐藏或定向到另一个文件夹的问题,则可以使用过滤器向导创建新的过滤器。过滤器向导显示具有过滤器匹配条件的所有属性。文档 HP_Fortify_Audit_Workbench_User_Guide_4.30 的 P 29;该文档包含在您的 Fortify 程序文件中。如果您希望其他人知道这些问题,即使您忽略它,这种替代方案可能会更好。

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

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

  • 相信我,我已经压制了“很多”问题,并将其他问题标记为“不是问题”,但我认为这不是长期可持续的。人类很容易忽视真正的问题。“正确的做法”是正确注释 Fortify 错误分类的变量,注释去污染数据的方法,并使用正确代表攻击面的规则集。 (3认同)
  • 我们通过手动压制解决了这个问题。后来我换了工作,所以我不再与 Fortify 合作。 (2认同)