我正在尝试消除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 :(得分:3)
Fortify为您提供了两种处理这种情况的方法:1)抑制问题,或2)隐藏问题。您选择哪种方式取决于您认为最适合您的方式。
已解决的问题。如果您确定特定漏洞不是,也绝不会成为问题,则可以将问题标记为已停止。您可能还希望禁止针对可能不是高优先级或直接关注的特定类型问题的警告。例如,您可以抑制已修复的问题,或者在您的情况下 - 您不打算修复的问题。已解决的问题未包含在问题面板中显示的组总计中。当您想要完全消除对问题的认识时,这种方法可能是最好的。
隐藏的问题。您可以暂时隐藏一组问题,以避免在您专注于其他地方时分散注意力。例如,您可以隐藏除分配给您的所有问题。分配用于解决您在视图中隐藏的问题的人员仍然可以访问它们。问题面板中显示的组总计包括隐藏的问题。如果在文件夹列表中发现要隐藏或指向另一个文件夹的问题,则可以使用过滤器向导创建新过滤器。过滤器向导显示具有过滤器匹配条件的所有属性。文件第29页HP_Fortify_Audit_Workbench_User_Guide_4.30;此文档与您的Fortify程序文件一起使用。如果您希望其他人知道这些问题,那么这种替代方案可能更为可取,即使您忽略了这些问题。
删除了问题。此替代方案与您的情况并不特别相关,但我为了完整起见而提出此选项。随着时间的推移,对项目进行多次扫描,问题通常会得到纠正或过时。在合并扫描结果时,静态代码分析器会标记在先前扫描中未发现的问题,但在最近的SCA分析结果中不再显示为已删除。已删除的问题不包含在问题面板中显示的组总计中。由于您不打算“修复”此问题,因此不会成为“已删除的问题”。
要显示或隐藏已删除,隐藏和已删除的问题,请使用“选项”菜单。可见性过滤器显示或隐藏问题。