上一节主要是简单地说了一下关于yii2的防御csrf的攻击机制,接下来说一下关于如何全局和局部的开启使用csrf。

(1)全局使用,我们直接在配置文件中设置enableCookieValidation为true
request => [ 'enableCookieValidation' => true, ]
如果不需要使用csrf的话,设置'enableCookieValidation' => false,但是这是不安全的,因此yii2的yii\web\request中的enableCookieValidation默认设置为true的,也就是默认开启csrf的,所以我们也可以不配置这个值,默认开启。
如果开启csrf,因为这是全局的,所以在任何的post请求都会要求认证,所以我们在post数据的时候,就必须设置csrf的数据隐藏在表单中。
复制代码 代码如下:
<input type="hidden" name="_csrf" id='csrf' value="<?= Yii::$app->request->csrfToken ?>">
post数据的时候必须要把这个值post过去,这个值的产生<?= Yii::$app->request->csrfToken ?>,返回一个加密后的csrfToken。
所以无论是post表单还是ajax的post过去,都必须设置csrfToken这个值,并且要提交时要post过去。如果没有的话,就会发生错误,无法认证通过。
(2)如果想在某些控制器不想使用csrf验证的话,又该如何做呢?
方法很简单,直接设置
public $enableCsrfValidation = false ,
因为这个Controller继承与yii\web\Controller ,将相当于继承于enableCsrfValidation这个属性,那么在创建控制器实例时,就会在这个控制器关闭csrf功能,访问这个控制器的post的方式时,也就不会进行验证。
举一个例子,比如我们开发API的时候,微信那边的接口需要post数据给我们的接口时,由于微信端不知道csrfToken,所以访问post数据的时候,如果开启全局csrf的话,那肯定不能访问成功的。所以这时就需要关闭这个API 的csrf。
3)如果要具体关闭至某一个action呢?
有时在一些功能中,我们需要在某一个action中关闭csrf验证。我们知道对于csrf的验证是在beforeAction($Action)中实现的,下面我们可以在Controller中重写beforeAction($action)这个方法
public function beforeAction($action) {
$currentaction = $action->id;
$novalidactions = ['dologin'];
if(in_array($currentaction,$novalidactions)) {
$action->controller->enableCsrfValidation = false;
}
parent::beforeAction($action);
return true;
}
传入的参数$action是controller针对这个访问实例化的对象,里面包含很多信息,大家可以打印看看。
首先执行$action->id获取当前的访问的action名称。而$novalidactions是一个数组,里面是action名称,这些action都是是你需要关闭csrf的认证的操作(需要关闭csrf认证的操作)。
通过当前的访问的action是否在这个$novalidactions中,如果在,说明这个action需要关闭csrf功能,所以就将这个控制器实例的设置为
$action->controller->enableCsrfValidation = false
接下来再执行parent::beforeAction($action),此时传入来的$action里的controller实例的enableCsrfValidation已变为false。
最后一定要返回true,否则的话,不会往下执行action操作的。
(4)如果局部开启呢?
首先在配置文件要设置
request => [ 'enableCookieValidation' => false, ]
全局不使用csrf。
(a)要在控制器中开启,只需要设置
public $enableCsrfValidation = true
则整个控制器都会开启
(b)要在action中开启
public function beforeAction($action) {
$currentaction = $action->id;
$accessactions = ['dologin'];
i f(in_array($currentaction,$accessactions)) {
$action->controller->enableCsrfValidation = true;
}
parent::beforeAction($action);
return true;
}
$accessactions是需要开启csrf的action的名称,将设置$action->controller->enableCsrfValidation = true,当前操作可以开启csrf。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# yii2
# 关闭csrf
# csrf
# 验证
# Yii框架防止sql注入
# xss攻击与csrf攻击的方法
# 这是
# 就会
# 在这个
# 要在
# 设置为
# 表单
# 配置文件
# 都是
# 是一个
# 是在
# 也就
# 不需要
# 说了
# 给我们
# 我们可以
# 要把
# 很简单
# 如果没有
# 重写
# 只需要
相关文章:
建站之星图片链接生成指南:自助建站与智能设计教程
建站主机功能解析:服务器选择与快速搭建指南
如何快速辨别茅台真假?关键步骤解析
建站之星伪静态规则如何设置?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
建站之星官网登录失败?如何快速解决?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
黑客如何通过漏洞一步步攻陷网站服务器?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何在IIS中新建站点并解决端口绑定冲突?
如何通过VPS建站无需域名直接访问?
安云自助建站系统如何快速提升SEO排名?
贸易公司网站制作流程,出口贸易网站设计怎么做?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何快速上传自定义模板至建站之星?
高防服务器如何保障网站安全无虞?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何用景安虚拟主机手机版绑定域名建站?
建站之星如何修改网站生成路径?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
Android滚轮选择时间控件使用详解
如何用美橙互联一键搭建多站合一网站?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
制作农业网站的软件,比较好的农业网站推荐一下?
建站之星2.7模板快速切换与批量管理功能操作指南
如何快速搭建自助建站会员专属系统?
红河网站制作公司,红河事业单位身份证如何上传?
建站主机如何选?性能与价格怎样平衡?
如何通过西部数码建站助手快速创建专业网站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
已有域名能否直接搭建网站?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
建站之星备案流程有哪些注意事项?
c++ stringstream用法详解_c++字符串与数字转换利器
如何将凡科建站内容保存为本地文件?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
高端智能建站公司优选:品牌定制与SEO优化一站式服务
南平网站制作公司,2025年南平市事业单位报名时间?
活动邀请函制作网站有哪些,活动邀请函文案?
如何选择CMS系统实现快速建站与SEO优化?
建站之星代理平台如何选择最佳方案?
c# 在高并发场景下,委托和接口调用的性能对比
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
h5网站制作工具有哪些,h5页面制作工具有哪些?
教程网站设计制作软件,怎么创建自己的一个网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。