HP Fortify假硬编码密码 - Java
我无法找出问题HP Fortify SCA正在报告的问题的解决方案。 它报告的问题是:HP Fortify假硬编码密码 - Java
硬编码密码,可以在某种程度上 不能轻易妥协补救系统的安全性。
代码看起来与此类似:
@Configuration
public class MySpringConfig {
private final String userName;
private final String password;
@Autowired
public MySpringConfig(
@Value("${my.userName}") final String userName,
@Value("${my.password}") final String password) {
this.host = host;
this.userName = userName;
this.password = password;
}
...
}
我不明白为什么会Fortify的认为这是一个硬编码密码。密码作为参数传递给构造函数,它来自Spring @Value
。
我已经考虑使用@FortifyNotPassword
来阻止这种误报,但这实际上是一个密码。我宁愿不使用该注释,因为它可能会遗漏实际问题,如记录此字段的值。
Fortify认为这是一个硬编码的密码,因为该工具不如人类聪明!这是我作为代码审查者遇到的最常见的误报之一。
如果没有人类代码审核员,Fortify不应该以自动化的方式使用。 Fortify有助于代码审查人员查看有趣的内容,而不是替换代码审阅人员。代码审查人员需要手动禁止或过滤此问题。
如果你想要一个更加自动化的解决方案,Fortify不是正确的工具,因为它会带来太多的误报。
是的,事实上Fortify并不那么聪明。事实证明,该投诉与“密码”出现在字符串@Value("${my.password}")
中有关。只需将其更改为@Value("${my.value}")
使错误消失。
与它存储在一个字段中的事实也有关系。最后,我重新整理了这个类,并且违规行为消失了:
@Configuration
public class MySpringConfig {
@Bean
public MyBean myBean(
@Value("${my.userName}") final String userName,
@Value("${my.password}") final String password) {
return new MyBeanThatNeedsUserCredentials(userName, password);
}
}
Fortify有不同的分析器。在这种情况下,它看起来像使用了语义分析器。这仅仅是“密码”一词的一个grep。所以你可以评估这种情况下的误报。语义分析器往往非常嘈杂。
如果您使用AuditWorkbench,在Summary选项卡下(点击发现后),您可以看到使用哪个引擎来查找问题。它在面板的右侧。