参考连接: 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