iT邦幫忙

3

Checkmarx的Reflected XSS All Clients如何修補?

不明 2018-05-17 17:39:1520756 瀏覽

客戶用checkmarx對php的專案做源碼掃描,出現大量Reflected XSS All Clients的風險
修改後還是過不了

原始的寫法

$name=substr(trim($_GET["name"]),0,15);

...

<span><?=$name?></span>

修改後的寫法

$name=htmlspecialchars(substr(trim($_GET["name"]),0,15),ENT_QUOTES);

...

<span><?=$name?></span>

$name這個變數中間沒在變動過
htmlspecialchars也加上ENT_QUOTES了

有人用過這一套嗎?
感謝!

不明 檢舉
這套的代理商回應修改過的解法是ok的
建議客戶可以加入例外清單

冏,白箱掃描工具太低端有沒有得解啊
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
不明 檢舉

就小弟的認知,php內建的htmlspecialchars()就是用來解決xss的
(雖然沒有到完美防堵)

小弟的問題點在於怎樣的寫法才是checkmarx能接受的方式?
1.php的htmlspecialchars()
2.自己刻正規表示法,用取代字串的方式過濾
3.自己刻正規表示法,踢走不合法的輸入
...

不同的源碼掃描工具,認定的標準會有不同(還有誤判的可能)
最差的狀況就只能一直改寫法,送測到客戶抓狂為止

Jam.liu iT邦新手 5 級 ‧ 2018-10-30 16:55:02 檢舉

的確有誤判,代理商自己都承認了,還緊急更版.
我們自己追了它掃出來的 XSS 風險, 發現程式碼 Call Stack根本不是它系統說的那樣. 寫了篇報告、並把追code的過程錄影, Call 原廠後才承認有 bug.
我們的客戶軍方體系和金融機構都有用他們家的...

2
jkliou
iT邦新手 5 級 ‧ 2018-10-30 23:22:00

我發現只要在$_GET/$_POST後、輸出前(echo 或 $output) 用PHP 的過濾function filter_var_array or filter_input_array就不會被掃出來。
但是如果你把它寫在你自己的 function 內, 它就可能會被忽視, 認為你的參數沒有消毒過.

而且只要你的物件方法命名一樣, 就有可能被誤判; 例如: $enrol->test_settings(); 它會導向到另一個 物件的 base_class::test_settings 去, 整個超傻眼 ><

被它們搞了半年多, 為了讓checkmarx掃到零風險, 搞的framework的架構大亂, 還掃不過; 都想要放棄了.
還好客戶要換另一套了.

我要發表回答

立即登入回答