启用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添加MySQL数据记录代码
Jun 07 PHP
php array_search() 函数使用
Apr 13 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
php文件缓存类用法实例分析
Apr 22 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
PHPMailer发送邮件
Dec 28 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
php-msf源码详解
Dec 25 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 PHP
PHP中的异常处理机制深入讲解
Nov 10 PHP
PHP7 字符串处理机制修改
Mar 09 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 jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python实现人脸识别代码
2017/11/08 Python
Python绘制七段数码管实例代码
2017/12/20 Python
python实现Adapter模式实例代码
2018/02/09 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
python操作yaml说明
2020/04/08 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
python支持多继承吗
2020/06/19 Python
Python 内存管理机制全面分析
2021/01/16 Python
Spy++的使用方法及下载教程
2021/01/29 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
如何用threejs实现实时多边形折射
2021/05/07 Javascript