AdSense

網頁

2025/3/19

Java Fortify 弱點掃描 log.error System Information Leak: Internal 解法

Java應用程式由Fortify靜態程式碼分析(SCA)工具進行弱點掃描時,出現[System Information Leak: Internal]漏洞的解法。


通常[System Information Leak: Internal]是low priority的漏洞,但某些公司/組織通常會無腦認為這是嚴重的問題必須得進行修復。

下面是在記錄例外錯誤訊息時常用的寫法,但卻會導致[System Information Leak: Internal]。

try {
    ...
} catch (Exception e) {
    log.error("錯誤發生", e);
}

即使這樣寫也會。

try {
    ...
} catch (Exception e) {
    log.error("錯誤發生, {}", e.getMessage());
}


解法一

老實說在後端,尤其是內部系統把這視為漏洞是件愚蠢的事,應該跟上面的說明可以忽略這種漏洞,但多數高層根本不在乎,所以程式人員就得解這種問題,然後要怎麼debug?更何況還可以根據不同環境設定印出log層級。


解法二

不要用log.error,改用log.debug

不要印出例外錯誤訊息,問題是程式出問題要怎麼解bug?

try {
    ...
} catch (Exception e) {
    log.debug("錯誤發生");
}

解法三

不要用log.error,改用log.debug

不要直接用e.printStackTrace(),使用另外的PrintWriter印出stack trace,或用Apache Commons Langsorg.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(Throwable throwable)取得stack trace字串來印log,如可即可繞過這個漏洞。

try {
    ...
} catch (Exception e) {
    log.debug("錯誤發生, {}", ExceptionUtils.getStackTrace(e));
}


沒有留言:

AdSense