2015-05-29 121 views
6

我試圖消除來自HP Fortify掃描的Java應用程序的誤報。HP Fortify - 註釋方法參數

這種方法會導致「侵犯隱私權」的問題(在PrintWriter的是一個servlet響應)

private void writeOutput(String passwordRules, PrintWriter out) { 
     ... 
     out.print(passwordRules); 
     ... 
} 

這是因爲Fortify的如下命名約定,以決定passwordRules包含私人數據。但我的passwordRules不是私人數據 - 它包含「最少8個字符」等內容。

我可以通過更改變量的名稱使錯誤消失。然而,原則上我不想爲了源代碼分析器的利益而損害我的代碼的可讀性。

我預計修復它:

private void writeOutput(@FortifyNotPassword String passwordRules, PrintWriter out) ... 

但是似乎註釋沒有爲這方面的書面:

The annotation @FortifyNotPassword is disallowed for this location. 

我想:

private void writeOutput(String passwordRules, PrintWriter out) { 
     ... 
     @FortifyNotPassword String rules = passwordRules; 
     out.print(rules); 
     ... 
} 

..但這並沒有消除假陽性。 (這會影響我不讓代碼不易讀的原則)。

我也嘗試了以上與@FortifyNotPrivate,具有相同的結果。

那麼有什麼正確的方法來做到這一點?

+0

糟糕!錯過了那一段。道歉。 –

回答

2

Fortify提供了兩種方法來處理這種情況:1)抑制問題,或2)隱藏問題。你選擇哪一種取決於你認爲最適合你的東西。

抑制問題。如果您確定特定漏洞不是,也從不會成爲問題,那麼您可以將問題標記爲已被抑制。您可能還想要針對可能不是高優先級或直接關注的特定類型問題取消警告。例如,您可以抑制已修復的問題,或者您不打算修復的問題。抑制性問題不包括在問題面板中顯示的組總數中。這種方法可能是最好的,當你想完全消除這個問題的意識。

隱藏的問題。你可以暫時隱藏一組問題,以避免分心,因爲你專注於別處。例如,您可以隱藏除分配給您的所有問題。分配給解決您隱藏在視圖中的問題的個人仍可以訪問它們。顯示在問題面板中的小組總計包括隱藏的問題。如果您在文件夾列表中發現要隱藏或指向其他文件夾的問題,可以使用過濾器嚮導創建新的過濾器。過濾器嚮導將顯示過濾器的所有具有匹配條件的屬性。文件HP_Fortify_Audit_Workbench_User_Guide_4.30的第29頁;本文檔與Fortify程序文件一起提供。如果您希望其他人瞭解這些問題,即使您忽略了這些問題,也可以選擇此替代方案。

已移除問題。這種替代方法與您的情況並不特別相關,但爲了完整起見,我提供了它。由於隨着時間的推移多個掃描項目運行,問題通常會得到補救或過時。由於它合併了掃描結果,因此靜態代碼分析器會標記先前掃描中未發現的問題,但在最近的SCA分析結果中顯示爲已刪除的問題。已刪除的問題不包含在「問題」面板中顯示的組總數中。由於您無意「修復」這個問題,因此它不會成爲「已刪除的問題」。

要顯示或隱藏壓縮,隱藏和刪除的問題,請使用選項菜單。可見性過濾器顯示或隱藏問題。

+0

謝謝,但我已經知道如何手動壓制/隱藏問題。這個問題具體是關於註釋Java,這樣誤報不僅被抑制,而且不存在。強化報告說明存在多少壓抑性問題,並警告大量這些問題是可疑的。 – slim

+0

根據Fortify的說法,壓制和隱藏是「書籍解決方案」。如何使用密碼的同義詞,如「憑證?」 – WaltHouser

+0

我不知道你的意思是「書籍解決方案」。註釋是一種支持的技術 - 請參閱Fortify目錄中的「Samples/advanced/java_annotations」。 @FortifyNotPassword適用於本地變量和字段 - 我只想對方法參數進行相同操作。 – slim