2017-04-06 15:31:01 2728次浏览 3条回答 0 悬赏 50 金钱

先上代码

ww.png

qq.png

点击页面上的一个按钮会调用ajax访问控制器,我加了个csrf验证判断,如果页面不刷新csrf不会发生变化,那始终验证都是yes。要是使用者用这个固定csrf和不同的id请求这个接口,就会修改其它的记录。我应该怎么防止这种情况呢?

最佳答案

  • 飘逸 发布于 2017-04-06 18:45 举报

    你的担心完全是多余的。

    CSRF 是其他站点利用你使用的 A 浏览器登录的 B 网站所保存的身份信息去伪造请求发送给 B 网站。

    很显然,其他网站基本不可能知道你的 csrfToken。所以在检测了csrf的请求中只会得到 400。本身就存在于你网站之下的 JS 却可以毫无顾忌的获得这个 token ,这也正是你希望的。

    这类似于你给了用户呈现的网页中的背景是一副湛蓝的天空,用户自己可以用 F12 换成大海。但这个用户无法把其他人的背景也换成大海。

    除非这个用户是你。

    1 条回复
    回复于 2017-04-07 09:21 回复

    看来是我对csrf的原理还不是很清晰,非常感谢,现在去好好看下csrf。

  • 回答于 2017-04-06 16:32 举报

    把csrf放到后台吧

  • 回答于 2017-04-06 17:58 举报

    1 其实你开启了控制器的enableCsrfValidation=true之后,控制器会帮你验证csrf的,你不用自己验证
    2 如果想重新生成,调用一下Yii::$app->request->getCsrfToken(true)就行,记得把新生成这个csrf放到你的页面meta[name=csrf-token]的content里,便于继续调用
    3 csrf的起到安全问题其实就是有这个验证(防止跨站攻击(跨站攻击,没这个值)),而没必要再变换这个值,所以没必要变换这个值

您需要登录后才可以回答。登录 | 立即注册
蓝灵焰
总监

蓝灵焰

注册时间:2015-10-06
最后登录:2019-09-27
在线时长:30小时4分
  • 粉丝7
  • 金钱4015
  • 威望0
  • 积分4315

热门问题