启用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中处理模拟rewrite 效果
Dec 09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
PHP对象转换为数组函数(递归方法)
Feb 04 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
php实现每日签到功能
Nov 29 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
laravel框架创建授权策略实例分析
Nov 22 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 PDO中文乱码解决办法
2009/07/20 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
CI框架表单验证实例详解
2016/11/21 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
javascript时区函数介绍
2012/09/14 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
django框架使用方法详解
2019/07/18 Python
python 有效的括号的实现代码示例
2019/11/11 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
垃圾回收的优点和原理
2014/05/16 面试题
网络管理员岗位职责
2014/03/17 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
python基础之停用词过滤详解
2021/04/21 Python
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android