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 Langs的org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(Throwable throwable)
取得stack trace字串來印log,如可即可繞過這個漏洞。
try {
...
} catch (Exception e) {
log.debug("錯誤發生, {}", ExceptionUtils.getStackTrace(e));
}
沒有留言:
張貼留言