启用Csrf后POST数据时出现的400错误


Posted in PHP onJuly 05, 2015

最近一直出现这样的错误,一直在查找原因,偶然看到一篇解决的文章,分享给大家看看。

第一种解决办法是关闭Csrf

public function init(){
  $this->enableCsrfValidation = false;
}

第二种解决办法是在form表单中加入隐藏域

<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">

第三种解决办法是在AJAX中加入_csrf字段

var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
 type: 'POST',
 url: url,
 data: {_csrf:csrfToken},
 success: success,
 dataType: dataType
});

Yii这个匹配的过程和Yii::$app->request->csrfToken 这个值存储位置说明:

存储位置

protected function createCsrfCookie($token)
  {
    $options = $this->csrfCookie;
    $options['name'] = $this->csrfParam;
    $options['value'] = $token;
    return new Cookie($options);
  }

校验方法

public function validateCsrfToken($token = null)
  {
    $method = $this->getMethod();
    // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
    if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
      return true;
    }

    $trueToken = $this->loadCsrfToken();

    if ($token !== null) {
      return $this->validateCsrfTokenInternal($token, $trueToken);
    } else {
      return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)
        || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);
    }
  }

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php session 错误
May 21 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
php中常用的预定义变量小结
May 09 PHP
工厂模式在Zend Framework中应用介绍
Jul 10 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
PHP基本语法实例总结
Sep 09 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
详解Laravel服务容器的优势
May 29 PHP
php超快高效率统计大文件行数
Jul 05 #PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 #PHP
PHP 获取ip地址代码汇总
Jul 05 #PHP
PHP中$_SERVER使用说明
Jul 05 #PHP
php实现短信发送代码
Jul 05 #PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 #PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 #PHP
You might like
php中计算时间差的几种方法
2009/12/31 PHP
第六章 php目录与文件操作
2011/12/30 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
php模板引擎技术简单实现
2016/03/15 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
python 字符串和整数的转换方法
2018/06/25 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
python圣诞树编写实例详解
2020/02/13 Python
Python数据正态性检验实现过程
2020/04/18 Python
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
类如何去实现接口
2013/12/19 面试题
什么是抽象
2015/12/13 面试题
商场中秋节广播稿
2014/01/17 职场文书
员工自我工作评价
2015/03/06 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
2019个人半年工作总结
2019/06/21 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android