我无法找到HP Fortify SCA正在报告的问题的解决方案。 它报告的问题是:
硬编码密码可能会以某种方式危及系统安全 不能轻易补救。
代码看起来类似于:
@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
来阻止这种误报,但这实际上是一个密码。我宁愿不使用该注释,因为它可能会错过真正的问题,比如记录这个字段的价值。
答案 0 :(得分:2)
Fortify认为这是一个硬编码密码,因为该工具不如人类聪明!这是我作为代码审查员遇到的最常见的误报之一。
如果没有人工代码审核员,Fortify不应以自动方式使用。 Fortify可以帮助代码审查人员查看有趣的内容,而不是替换代码审阅者。代码审阅者需要手动抑制或过滤掉此问题。
如果您想要更自动化的解决方案,Fortify不是正确的工具,因为它会带来太多的误报。
答案 1 :(得分:1)
是的,事实上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);
}
}
答案 2 :(得分:0)
Fortify有不同的分析仪。在这种情况下,看起来使用了语义分析器。它只是一个grep的单词"密码"。因此,您可以将此案例评估为误报。语义分析器往往非常嘈杂。
如果您使用AuditWorkbench,则在“摘要”选项卡下(单击查找结果后),您可以看到用于查找问题的引擎。它在面板的右侧。