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选项卡下(点击发现后),您可以看到使用哪个引擎来查找问题。它在面板的右侧。