問題
程式中用了 DOMPurify.sanitize
來處理 XSS ,結果 Checkmarx 還是會噴 Client DOM XSS 或是 Client DOM Stored XSS 的問題,怎麼辦?
解法
請確認 Checkmarx 是否在 Checkmarx V9.4.5 HF16。
在 Checkmarx V9.4.5 HF16 後,原本使用DOMPurify.sanitize
的程式碼,
會被掃出有 Client DOM Stored XSS or Client DOM XSS 的 Issue。例如,
1 | var x = DOMPurify.sanitize(window.location.search); |
那是因為 Checkmarx V9.4.5 HF16 有特別針對 DOMPurify.sanitize
來判斷,
如果使用 DOMPurify.sanitize ,程式碼中一定要有 requireDOMpurify
不過,在一般直接引用 dist/purify.min.js
,並不會用到 require 去載 purify.js 。
如果是這種狀況,檢視程式碼,確定有引用 DOMPurify
,並使用 DOMPurify.sanitize
消毒,則建議設定為 不可利用
如果客戶不接受說明,只能接受在 Checkmarx 報告中,沒有任何的 Issue 出現,怎麼辦?
那只好做個假的出來讓 Checkmarx 覺得它在,如下,
1 | //以下是讓 Checkmarx V9.4.5 HF16 針對 DOMPurify.sanitize 可以 Pass 的 JS Code |
參考資源
Checkmarx Client_Heuristic_Poor_XSS_Validation
Client_DOM_XSS/Client DOM Stored XSS - Checkmarx V9.4.5 HF16