事情的通過是這樣的,一個自動化掃描工具說個人代碼中存在XSS漏洞,什麼是XSS不懂的朋友能夠看這裏php
個人代碼裏面開啓CodeIgniter框架的CSRF Token,以下:html
很簡單,更多詳情參考CI官方文檔,主要用法就是在form_open時候自動插入一個隱藏的token值,固然還能夠直接用php echo security->csrf_hash來配合其餘一些用法,這裏很少說。安全
接下來講說個人代碼,Controller中代碼以下:服務器
視圖層代碼這裏頁寫得比較簡單:框架
代碼中只是生成一個form裏面帶有token用於頁面和服務器之間進行交流的。xss
代碼介紹完了,接下來就來看自動化工具認爲存在xss的地方。ide
自動化工具是經過這兩處來判斷的。所以咱們查看form_open的源碼:函數
能夠看到,當form_open函數的action爲空的時候,form的action會默認取當前的url。codeigniter
若是當前的url有「豈不是能夠截斷html從而形成xss了,帶着這樣想法,咱們來構造一下:工具
默認是會被ci框架攔截的,由於存在非法字符,這個字符定義是在config.php中:
有些時候url出現中文本攔截也是由於這個配置。
大體運行的流程以下:
index.php
CodeIgniter.php
Router.php
URI.php
URI.php
從上的例子能夠看到,若是form_open空參數的可能帶來必定的安全問題,可是默認狀況下CI是攔截這些非法字符的,所以不會形成威脅。可是爲了安全咱們應該養成好的習慣,form_open必須有非空的action參數,就算這個form表單你不會使用。