CodeIgniter中使用CSRF TOKEN的一個坑

事情的通過是這樣的,一個自動化掃描工具說個人代碼中存在XSS漏洞,什麼是XSS不懂的朋友能夠看這裏php

個人代碼裏面開啓CodeIgniter框架的CSRF Token,以下:html

NewImage

很簡單,更多詳情參考CI官方文檔,主要用法就是在form_open時候自動插入一個隱藏的token值,固然還能夠直接用php echo security->csrf_hash來配合其餘一些用法,這裏很少說。安全

接下來講說個人代碼,Controller中代碼以下:服務器

NewImage

視圖層代碼這裏頁寫得比較簡單:框架

NewImage

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

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

NewImage

自動化工具是經過這兩處來判斷的。所以咱們查看form_open的源碼:函數

NewImage

能夠看到,當form_open函數的action爲空的時候,form的action會默認取當前的url。codeigniter

若是當前的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表單你不會使用。

相關文章
相關標籤/搜索