全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

yii2局部关闭(开启)csrf的验证的实例代码

上一节主要是简单地说了一下关于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小时内与您取得联系。