參考連接: http://blog.coinidea.com/web%E5%BC%80%E5%8F%91/php/yii-php-888.htmljavascript
CSRF即跨站僞造請求,XSS即跨站腳本攻擊,說實話我也是最近才第一次接觸。php
編寫了一個Yii的網站,用測試軟件(好比,IBM APP Scan)掃描以後發現比較多以及比較嚴重的兩個問題,一個是CSRF,另外一個是XSS。html
那麼如何解決呢?前端
參考連接:http://www.crarun.com/article-7.htmljava
Yii在配置文件中,支持csrf配置,一旦配置以後,會在表單中嵌入一個隱藏的value爲hash key的token,服務器經過token驗證當次請求是否被受權。web
'components'=>array( 'request'=>array( // Enable Yii Validate CSRF Token 'enableCsrfValidation' => true, ), ),
實際上,由於我用的Yii框架版本比較低,因此在form表單中,框架並無爲我本身建立input,因此被逼無奈,只能本身建立,插入一下代碼便可:ajax
<input type="hidden" value="<?php echo Yii::app()->getRequest()->getCsrfToken(); ?>" name="YII_CSRF_TOKEN" />
另外一個問題來了,由於是fix csrf,前期考慮得不是很周詳,可是整個系統中含有大量的ajax建立的post提交,這致使了不少js代碼中含有post提交,可是Yii的view輸出並不能影響到js的代碼裏面,即.js文件裏面就算是加了上述代碼,php也不會有任何輸出。 此時我想了一個折中的辦法: 在js的post提交中加入如下代碼:segmentfault
$("input[name='YII_CSRF_TOKEN']").val()
而後在php view裏面加入隱藏的代碼便可。 可是這也看出一個問題,這並不能完備的防止csrf,最優的解決辦法,仍是應該將受權嵌入每一個用戶的session中。服務器
參考連接: http://blog.coinidea.com/web%E5%BC%80%E5%8F%91/php/yii-php-888.htmlsession