HP强化假阳性硬编码密码-Java
我很难找到HP Fortify SCA报告的问题的解决方案。 它报告的问题是: 硬编码密码可能会以以下方式危害系统安全: 不容易补救 代码与此类似:HP强化假阳性硬编码密码-Java,java,fortify,Java,Fortify,我很难找到HP Fortify SCA报告的问题的解决方案。 它报告的问题是: 硬编码密码可能会以以下方式危害系统安全: 不容易补救 代码与此类似: @Configuration public class MySpringConfig { private final String userName; private final String password; @Autowired public MySpringConfig( @Va
@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并没有那么聪明。事实证明,投诉与“password”出现在字符串
@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选项卡下(单击查找后),可以看到用于查找问题的引擎。它在面板的右侧。对我来说,这段代码是一个巨大的安全隐患。“@Value”让开发者非常容易生气。如果您将my.password保留为纯文本,这将是一个超级问题。如果您正在使用类似jascrypt的东西来加密my.password,那么您将解密密钥保存在哪里?在环境变量中?这也是一个安全问题。