CodeIgniter中使用CSRF TOKEN的一個坑


事情的經過是這樣的,一個自動化掃描工具說我的代碼中存在XSS漏洞,什么是XSS不懂的朋友可以看這里

我的代碼里面開啟CodeIgniter框架的CSRF Token,如下:

NewImage

很簡單,更多詳情參考CI官方文檔,主要用法就是在form_open時候自動插入一個隱藏的token值,當然還可以直接用php echo security->csrf_hash來配合其他一些用法,這里不多說。

接下來說說我的代碼,Controller中代碼如下:

NewImage

視圖層代碼這里頁寫得比較簡單:

NewImage

代碼中只是生成一個form里面帶有token用於頁面和服務器之間進行交流的。

代碼介紹完了,接下來就來看自動化工具認為存在xss的地方。

NewImage

自動化工具是通過這兩處來判斷的。因此我們查看form_open的源碼:

NewImage

可以看到,當form_open函數的action為空的時候,form的action會默認取當前的url。

如果當前的url有“豈不是可以截斷html從而造成xss了,帶着這樣想法,我們來構造一下:

NewImage

默認是會被ci框架攔截的,因為存在非法字符,這個字符定義是在config.php中:

NewImage

有些時候url出現中文本攔截也是因為這個配置。

大致運行的流程如下:

NewImage         index.php

NewImage                    CodeIgniter.php

NewImage            Router.php

NewImage            URI.php

NewImage            URI.php

從上的例子可以看到,如果form_open空參數的可能帶來一定的安全問題,但是默認情況下CI是攔截這些非法字符的,因此不會造成威脅。但是為了安全我們應該養成好的習慣,form_open必須有非空的action參數,就算這個form表單你不會使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM