2015-05-29 100 views
6

我试图消除来自HP Fortify扫描的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,具有相同的结果。

那么有什么正确的方法来做到这一点?

+0

糟糕!错过了那一段。道歉。 –

回答

2

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

抑制问题。如果您确定特定漏洞不是,也从不会成为问题,那么您可以将问题标记为已被抑制。您可能还想要针对可能不是高优先级或直接关注的特定类型问题取消警告。例如,您可以抑制已修复的问题,或者您不打算修复的问题。抑制性问题不包括在问题面板中显示的组总数中。这种方法可能是最好的,当你想完全消除这个问题的意识。

隐藏的问题。你可以暂时隐藏一组问题,以避免分心,因为你专注于别处。例如,您可以隐藏除分配给您的所有问题。分配给解决您隐藏在视图中的问题的个人仍可以访问它们。显示在问题面板中的小组总计包括隐藏的问题。如果您在文件夹列表中发现要隐藏或指向其他文件夹的问题,可以使用过滤器向导创建新的过滤器。过滤器向导将显示过滤器的所有具有匹配条件的属性。文件HP_Fortify_Audit_Workbench_User_Guide_4.30的第29页;本文档与Fortify程序文件一起提供。如果您希望其他人了解这些问题,即使您忽略了这些问题,也可以选择此替代方案。

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

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

+0

谢谢,但我已经知道如何手动压制/隐藏问题。这个问题具体是关于注释Java,这样误报不仅被抑制,而且不存在。强化报告说明存在多少压抑性问题,并警告大量这些问题是可疑的。 – slim

+0

根据Fortify的说法,压制和隐藏是“书籍解决方案”。如何使用密码的同义词,如“凭证?” – WaltHouser

+0

我不知道你的意思是“书籍解决方案”。注释是一种支持的技术 - 请参阅Fortify目录中的“Samples/advanced/java_annotations”。 @FortifyNotPassword适用于本地变量和字段 - 我只想对方法参数进行相同操作。 – slim