当前位置:首页 > PHP > Yii2 > 正文内容

yii2 ajax csrf meta,yii2开启CSRF后POST"提交的数据无法被验证"

佳航网络工作室2年前 (2024-01-23)Yii21338

CSRF全称Cross-site request forgery,即跨站请求伪造。利用CSRF,攻击者可以破坏网络请求会话的完整性。比如如果在一个Web页面中存在js ajax的请求,为了网站安全,你应该仅允许这个ajax请求在当前web页面内发起。否则的话,用户可以通过模拟该ajax请求的方式发起攻击。

防御CSRF攻击的方式主要有验证token,Referer,header等。yii2框架采用的验证token的方式,当开启CSRF校验之后,会在Web请求Cookie中生成CSRF token信息。

yii2中开启/关闭CSRF校验

yii2中默认开启了CSRF校验,如果全局关闭后,可以在指定Controller中开启:

public $enableCsrfValidation = true;

全局开启后,可以在指定Controller中关闭:

public $enableCsrfValidation = false;

由于关闭CSRF校验会降低网站安全性,故不建议关闭。

开启CSRF校验后,很可能在ajax的POST请求中出现“400错误:您提交的数据无法被验证”,可以通过以下几种方式处理。

1,使用ActiveForm包裹输入组件

<?php $form = ActiveForm::begin(['id' => 'search-form']); ?>

2,在form表单中添加隐藏域

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


3,直接在ajax请求中添加_csrf参数

var csrf = '=Yii::$app->request->getCsrfToken()?>'
$.ajax({
type: 'POST',
url: url,
data: {_csrf: csrf} //此处_csrf应与config/main.php中csrfParam的值保持一致,如_csrf-backend、_csrf-frontend
...
})


$.ajax({
type: 'POST',
url: url,
data: {'_csrf-backend': $('meta[name="csrf-token"]').attr("content")} //直接使用meta中的csrf-token
...
})

关闭Cookie后,CSRF验证将失效

由于yii2的CSRF验证机制需要依赖Cookie,如果用户浏览器关闭Cookie,则功能失效。目前没有很好的方式处理这种问题。


扫描二维码推送至手机访问。

版权声明:本文由佳航网络发布,如需转载请注明出处。

本文链接:https://jiahang.work/?id=19

标签: Yii2
分享给朋友:

“yii2 ajax csrf meta,yii2开启CSRF后POST"提交的数据无法被验证"” 的相关文章

【从零开始搭建Yii2后台管理系统】一、前言及准备工作

本文将从零开始,分享使用Yii2搭建后台管理系统的开发流程,实现前后台分离、登录验证、菜单管理、权限控制、文章管理等基本功能,可作为其他项目的Starter Kit使用。本猿开发经验有限,若有不足之处还请留言指教,以成抛砖引玉之美。本次开发使用的主要程序及工具Yii2 Framework advan...

【从零开始搭建Yii2后台管理系统】三、搭建数据库,实现后台系统登录

【从零开始搭建Yii2后台管理系统】三、搭建数据库,实现后台系统登录

在上一篇文章中,已实现网站的初步访问,下一步进行网站的完善和改造。1.创建数据库CREATE DATABASE IF NOT EXISTS `moonadmin` DEFAULT CHARACTER SET u...

Yii2 中如何彻底禁用掉自带的 Yii、JQuery 和 Bootstrap 脚本 [ 2.0 版本 ]

▪ 环境基于 Yii2 高级模板▪ 前言默认情况下,Yii2 会自动加载 Yii、JQuery 和 Bootstrap 等脚本和样式,但有时项目中可能并不需要这些库,或者使用其他版本;下面介绍如何去掉这些库脚本和样式。▪ 去除 Yii.js 相关脚本编辑 frontend\asset\AppAsse...

Yii2.0 多语言设置(高级版配置方法) [ 2.0 版本 ]

Yii2.0 多语言设置(高级版配置方法) [ 2.0 版本 ]

1.设置默认语言:在main.php配置文件加上:'language'=>'zh_CN';2.多语言切换 (我这边是在site控制器里面操作的所以用的'/site/language')html代码 :<a href="&...

Yii2使用自带验证码

** 分别MVC 三部分来看怎么实现yii2自带的验证码。 **** Model **class LoginForm extends Model {   public $username;   ...

YII2 where查询条件整理 [ 2.0 版本 ]

YII2 where查询条件整理 [ 2.0 版本 ]

文章涉及where、 addParams 、filterWhere 、andWhere、orWhere、 andFilterWhere()、 orFilterWhere()、andFilterCompare()但是格式是一样的字符串格式,例如:'status=1'哈希格式,例如:&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。