yii的csrf使用

csrf的思想:

-------------------------------------------------------------

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里的值和表单隐藏字段的那个值是不是相同。

时间: 2024-11-04 01:39:50

yii的csrf使用的相关文章

解决YII提交POST表单出现400错误,以及ajax post请求时出现400问题

POST表单400错误: 正确做法: Add this in the head section of your layout: <?= Html::csrfMetaTags() ?> ---------------------------------  不推荐的做法,以下做法是取消CSRF令牌验证: Add this in your controller: public $enableCsrfValidation = false; 别的方法: 原来是csrf验证的问题,因为表单是自己写的,在Y

yii2 关于csrf

文章来自http://blog.crarun.com/article-7.html 在Yii框架中,为了防止csrf攻击,封装了CSRF令牌验证. 只需要在主配置文件中进行简单的配置,就可以实现CSRF的验证. 'components'=>array(         'request'=>array(             // Enable Yii Validate CSRF Token             'enableCsrfValidation' => true,    

YII 2.0 Bad Request (#400)

post提交表单的时候出现在这个错误是因为Yii2.0默认开启了_crsf的验证 可以在控制器里局部禁用 public $enableCsrfValidation = false ->覆盖父类的属性 也可以在配置文件中全局禁用  'components' => [         'request' => [             /**             /*!!! insert a secret key in the following (if it is empty) - 

Yii框架 400 错误

YII  400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用. 所以,如果你自己没有csrf校验机制,严禁关闭csrf. 怎么关呢? public $enableCsrfValidation=false;  设置 为false为成员变量 如果不关.怎么

yii2表单提交CSRF验证

Yii2表单提交默认需要验证CSRF,如果CSRF验证不通过,则表单提交失败,解决方法如下: 第一种解决办法是关闭Csrf public $enableCsrfValidation = false; 第二种解决办法是在form表单中加入隐藏域(如果是高级版的name值分前后台区分) <input type="text" name="_csrf-frontend" value="<?= Yii::$app->request->csrf

yii框架post提交遇到400 (Unable to verify your data submission. )

第一种解决办法是关闭Csrf public function init(){ $this->enableCsrfValidation = false; } 第二种解决办法是在form表单中加入隐藏域 <input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>"> 第三种

Yii 开发微信 &#39;您提交的数据无法被验证&#39;

使用Yii开发微信时,出现 [error][yii\web\HttpException:400] exception 'yii\web\BadRequestHttpException' with message '您提交的数据无法被验证.' 这个问题貌似Yii1.x跟Yii2都会出现,本人是使用Yii2.0出现的问题. 该问题由于Yii csrf引起,只要局部关闭就可以 public $enableCsrfValidation = false; 全局关闭也可以,但不建议! Yii 开发微信 '您

与《YII框架》不得不说的故事—5篇目录

与<YII框架>不得不说的故事—基础篇 第1章 课程目标 1-1 课程目标 (00:54) 第2章 课前知识准备 2-1 YII的启动和安装 (05:12) 2-2 YII请求处理流程 (02:44) 2-3 命名空间 (10:46) 第3章 控制器 3-1 控制器的创建 (03:22) 3-2 控制器之请求处理 (05:58) 3-3 控制器之响应处理 (09:09) 3-4 控制器之session处理 (09:25) 3-5 控制器之cookie处理 (09:11) 第4章 视图 4-1

[翻译]如何用YII写出安全的WEB应用

前言 虽然本文是基于YII1.1,但其中提到的安全措施适用于多数web项目安全场景,所以翻译此文,跟大家交流.原文地址. 目录 安全基本措施... 2 验证与过滤用户的输入信息... 2 原理... 2 客户端验证... 2 YII如何防范... 2 跨站脚本攻击XSS. 4 原理... 4 YII如何防范... 5 SQL注入... 7 原理... 7 YII如何防范... 8 跨站请求伪造CSRF. 12 配置WEB服务器... 12 PHP项目一些有用的指令... 15 授权... 16