资讯专栏INFORMATION COLUMN

yii 2 局部关闭 CSRF 拦截

Paul_King / 2930人阅读

摘要:最近在拿开发微信公众平台,在微信请求接口时,没有返回数据,于是查询错误日志,发现错误为于是查看源代码,在我们继承的顶级中,有下列属性行的内,对他做了处理于是找到错误原因内,对攻击做了处理,会对提交的数据做验证,而微信到我们服务器的

最近在拿 yii 2.0 开发微信公众平台,在微信 post 请求接口时,没有返回数据,于是查询 yii 错误日志,发现错误为

exception ‘yiiwebBadRequestHttpException’ with message ‘Unable to verify your data submission

于是查看源代码,yii 2.0 在 我们继承的顶级 controller 中,有下列属性

    /**
     * @var boolean whether to enable CSRF validation for the actions in this controller.
     * CSRF validation is enabled only when both this property and [[Request::enableCsrfValidation]] are true.
     */
    public $enableCsrfValidation = true;

106 行的 beforeAction 内,对他做了处理

public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {
                throw new BadRequestHttpException(Yii::t("yii", "Unable to verify your data submission."));
            }
            return true;
        } else {
            return false;
        }
    }

于是找到错误原因:

yii 2.0 内,对 CSRF 攻击做了处理,会对 post 提交的数据做 token 验证,而微信 post 到我们服务器的代码中,没有带上这个 token ,所以会验证失败

解决方法:

1、在我们的控制器里面,加上这行属性,设置为 false

public $enableCsrfValidation = false;

你还可以直接修改顶层控制器的 $enableCsrfValidation ,但是不推荐这样做!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20899.html

相关文章

  • 部门和人员全部实现无刷新并结合Csrf验证所遇问题

    摘要:根据文章的标题,大家应该看出来了,我在部门和人员这一模块当中就用了无刷新的技术,一并结合自带的验证。需求分析做一个部门和人员模块全部使用无刷新技术开发。一大模块全部实现无刷新,有些方法代码量会很大,得把握好它们之间的相关性和其它互不影响性。 前言 Ajax+PHP实现动态无刷新技术应用及其广泛,因为它有着可动态的实现WEB页面局部刷新,减轻服务器端负担,按需取数据,能带来更好的用户体验...

    Zhuxy 评论0 收藏0
  • Yii修行之路 - Security 安全

    摘要:认证事件类在登录和注销流程引发一些事件。成功注销后引发。提供两种授权方法存取控制过滤器和基于角色的存取控制。允许已认证用户执行操作。指定一个回调函数用于判定该规则是否满足条件。 简述 在程序开发过程中,往往都不能忽视安全问题,无论你的框架有多么完美,都会有破绽,所以完善自己的系统,从程序开发的安全角度去思考问题,把一切潜在的危机扼杀在摇篮中。 认证(Authentication) 认证...

    AaronYuan 评论0 收藏0
  • YII2项目常用技能知识总结

    摘要:不通过日志获取执行的原生语句和打印变量数据打印变量数据可以这样写引用命名空间使用使用第二个参数是数组的深度第三个参数是是否显示代码高亮默认不显示从数据库二维数组中返回一维数组并配合验证规则实现分类数据过滤。 1、不通过日志获取AR执行的原生SQL语句和打印变量数据 $query = User::find() ->select([username])->where([id=>[1,2,3...

    W_BinaryTree 评论0 收藏0
  • 理解CSRF跨站请求伪造

    摘要:受害者在银行有一笔存款,通过对银行的网站发送请求可以使把的存款转到的账号下。大多数情况下,该请求会失败,因为他要求的认证信息。要抵御,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于之中。 受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求 http://bank.example/withdraw?... 可以使 Bob 把 1000000 的存款转到 bob2 的...

    nidaye 评论0 收藏0
  • session与登录机制

    摘要:每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。由于可以被人为的禁止,必须有其他机制以便在被禁止时仍然能够把传递回服务器。 github 地址:戳这里 session 概念 指一类用来在客户端与服务器之间保持状态的解决方案 这种解决方案的存储结构 特点 由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。...

    nifhlheimr 评论0 收藏0

发表评论

0条评论

Paul_King

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<