yii的csrf使用
2015-10-26 00:00
736 查看
csrf的思想:
-------------------------------------------------------------
yii使用:
1. 在表单中加一个隐藏域
2. 在后台提供订单后验证
其实就是,判断cookie里的值和表单隐藏字段的那个值是不是相同。
-------------------------------------------------------------
yii使用:
1. 在表单中加一个隐藏域
<div id="tokenId" type="hidden"><?php $this->useCsrfToken();?></div>
public function useCsrfToken(){ $request=Yii::app()->request; echo CHtml::hiddenField($request->csrfTokenName,$request->getCsrfToken(),array('id'=>false)); }
2. 在后台提供订单后验证
public function validateCsrfToken() { $request=Yii::app()->request; if($request->getIsPostRequest()) { // only validate POST requests $cookies=$request->getCookies(); if($cookies->contains($request->csrfTokenName) && isset($_POST[$request->csrfTokenName])) { $tokenFromCookie=$cookies->itemAt($request->csrfTokenName)->value; $tokenFromPost=$_POST[$request->csrfTokenName]; $valid=$tokenFromCookie===$tokenFromPost; } else $valid=false; if(!$valid){ if (Yii::app()->request->isAjaxRequest) { echo Controller::TOKENERROR; Yii::app()->end(); } else { @header('HTTP/1.1 403 Forbidden'); $_SERVER['HTTP_REFERER'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'NO_HTTP_REFERER'; YiiLog('令牌错误, 非法请求! -'.json_encode($_POST).'|'.$_SERVER['REQUEST_URI'].'|'.$_SERVER['HTTP_REFERER']); Yii::app()->end(); } } } }
其实就是,判断cookie里的值和表单隐藏字段的那个值是不是相同。
相关文章推荐
- PhpMyAdmin导入数据时提示文件大小超出PHP限制的解决方法
- php反射例子
- PHP方法之 mb_substr
- PHP 表单添加隐藏 Token 阻止外部提交
- php魔法常量
- ftp配置
- phpstorm
- 一个FTP任务
- FragmentPagerAdapter与FragmentStatePagerAdapter区别
- 递归实现 1+2+3+...100 php和java
- 配置Vsftpd服务器
- SDH、MSTP、OTN和PTN的区别和联系
- php curl函数理解
- php注释规范
- php文件操作
- PHP超时处理全面总结
- 配置 windows server FTP开启防火墙例外后然然无法访问的解决办法
- XML文档的PHP程序查询代码
- 在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法
- DNS、FTP简介