启用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 常见郁闷问题答解
Nov 25 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 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 水平的题目
2007/05/30 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
用JS实现的一个include函数
2007/07/21 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
Python最长公共子串算法实例
2015/03/07 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
python读取并写入mat文件的方法
2019/07/12 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
车间班组长岗位职责
2013/11/13 职场文书
公积金单位接收函
2014/01/11 职场文书
师德师风自我评价范文
2014/09/11 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
会计岗位职责
2015/02/03 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
于丹论语心得观后感
2015/06/15 职场文书
银行工作心得体会范文
2016/01/23 职场文书
合作协议书格式范本
2016/03/21 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
Django与数据库交互的实现
2021/06/03 Python