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

CSRF全称Cross-site request forgery,即跨站请求伪造。利用CSRF,攻击者可以破坏网络请求会话的完整性。

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;

您提交的数据无法被验证

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

1,使用ActiveForm包裹输入组件

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

//...

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

var csrf = '=Yii::$app->request->getCsrfToken()?>'

$.ajax({

type: 'POST',

url: url,

data: {_csrf: csrf}

...

})

关闭Cookie后,CSRF验证将失效

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

其它文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值