2012/06/13

XSS Filter on CodeIgniter

過去防止 XSS 攻擊都是透過 htmlspecialchars() 將「<」、「>」等符號編碼,但若是前端有使用 CKEditor 之類工具,文章中的樣式也會全部被洗掉。

最近用 CodeIgniter Input class 提供的 XSS filter 時,無意間發現 filter 不是將所有特殊符號過濾掉,而是經過 parser 以後才決定哪些標籤和屬性需要刪除。


一般常見用來測試 XSS 的字串:
<script>alert(123)</script>

輸出:
[removed]alert(123)[removed]



若是將 javascript 嵌在屬性當中,CodeIgniter 會將標籤留下、屬性刪除:
<a href="#" onclick="alert(123)">test</a>

輸出:
<a >test</a>

2 則留言:

  1. parser 好像會 pa 錯 XD

    回覆刪除
  2. 一些正常的中文字符會被過濾掉

    回覆刪除