HP Fortify误报硬编码密码 - Java

时间:2017-09-25 22:20:36

标签: java fortify

我无法找到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来阻止这种误报,但这实际上是一个密码。我宁愿不使用该注释,因为它可能会错过真正的问题,比如记录这个字段的价值。

3 个答案:

答案 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,则在“摘要”选项卡下(单击查找结果后),您可以看到用于查找问题的引擎。它在面板的右侧。