2017-09-25 102 views
1

我無法找出問題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來阻止這種誤報,但這實際上是一個密碼。我寧願不使用該註釋,因爲它可能會遺漏實際問題,如記錄此字段的值。

回答

1

Fortify認爲這是一個硬編碼的密碼,因爲該工具不如人類聰明!這是我作爲代碼審查者遇到的最常見的誤報之一。

如果沒有人類代碼審覈員,Fortify不應該以自動化的方式使用。 Fortify有助於代碼審查人員查看有趣的內容,而不是替換代碼審閱人員。代碼審查人員需要手動禁止或過濾此問題。

如果你想要一個更加自動化的解決方案,Fortify不是正確的工具,因爲它會帶來太多的誤報。

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); 
    } 

} 
0

Fortify有不同的分析器。在這種情況下,它看起來像使用了語義分析器。這僅僅是「密碼」一詞的一個grep。所以你可以評估這種情況下的誤報。語義分析器往往非常嘈雜。

如果您使用AuditWorkbench,在Summary選項卡下(點擊發現後),您可以看到使用哪個引擎來查找問題。它在面板的右側。