zoukankan      html  css  js  c++  java
  • Yii2 关闭和打开csrf 验证

    CSRF即Cross-site request forgery跨站请求伪造,是指有人冒充你的身份进行一些恶意操作。
    比如你登录了网站A,网站A在你的电脑设置了cookie用以标识身份和状态,然后你又访问了网站B,这时候网站B就可以冒充你的身份在A网站进行操作,因为网站B在请求网站A时,浏览器会自动发送之前设置的cookie信息,让网站A误认为仍然是你在进行操作。
    对于csrf的防范,一般都会放在服务器端进行,那么我们来看下Yii2中是如何进行防范的。

    关于CSRF验证

    • 全局关闭(不安全),所有的controller都将关闭csrf验证,如果设置成true,则将打开csrf验证。
    //configmain.php
    request => [
        'enableCookieValidation' => false,
    ]
    
    • 控制器内关闭CSRF
    public enableCsrfValidation = false ,
    
    • 关闭至某一个action的CSRF
    public function beforeAction($action) {
      
        $currentaction = $action->id;
      
        $novalidactions = ['dologin'];
      
        if(in_array($currentaction,$novalidactions)) {
      
            $action->controller->enableCsrfValidation = false;
        }
        parent::beforeAction($action);
      
        return true;
    }
    
    • 开启某些action的CSRF
        public $enableCsrfValidation = false;
        //仅对用户新增、编辑['signup','update'],开启CSRF认证 
        public function beforeAction($action)
        {
            $currentaction = $action->id;
            $accessactions = ['signup','update'];
            if (in_array($currentaction, $accessactions)) {
                $action->controller->enableCsrfValidation = true;
            }
            parent::beforeAction($action);
            return true;
        }
    
    • 普通提交,form表单中加入隐藏域
    <input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">
    <input name="<?= Yii::$app->request->csrfParam; ?>" type="hidden" 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
    });
    

    参考:
    https://www.cnblogs.com/Yanger90/p/5799739.html
    https://www.cnblogs.com/niuben/p/11057454.html
    https://blog.csdn.net/terry_water/article/details/52221007

  • 相关阅读:
    常用公式 距离、波形、力
    代码字体
    关于flash缩放的详细解释
    色调
    工程项目1
    使用double无法得到数学上的精确结果的原因及为何不能用double来初始化BigDecimal
    第一次测验感受
    原码,补码,反码的概念及Java中使用那种存储方式
    static的含义
    第一次测试代码
  • 原文地址:https://www.cnblogs.com/meetuj/p/14247748.html
Copyright © 2011-2022 走看看