2016-06-30 22:42:14 2996次浏览 3条回答 0 悬赏 10 金钱

2.08的注销按钮代码

$menuItems[] = '<li>'
    . Html::beginForm(['/site/logout'], 'post')
    . Html::submitButton(
        'Logout (' . Yii::$app->user->identity->username . ')',
        ['class' => 'btn btn-link']
    )
    . Html::endForm()
    . '</li>';

之前的版本是这样的

$menuItems[] = [
    'label' => '注销 (' . Yii::$app->user->identity->username . ')',
    'url' => ['/site/logout'],
    'linkOptions' => ['data-method' => 'post']
];

这个改动是不是更安全??
但是导航显示出现了问题
(yiichina的图片上传是不是不对啊,弄不上去)

最佳答案

  • yidashi 发布于 2016-07-01 12:53 举报

    没区别啊,效果一样的。都是post方式注销的,防止低端的csrf攻击。

    CSRF 是跨站请求伪造的缩写。这个攻击思想源自许多应用程序假设来自用户的浏览器请求是由用户自己产生的,而事实并非如此。

    比如说:an.example.com 站点有一个 /logout URL,当以 GET 请求访问时,登出用户。如果它是由用户自己操作的,那么一切都没有问题。但是,有一天坏人在一个用户经常访问的论坛发了一个 <img src="/docs/guide/2.0/http://an.example.com/logout"> 内容的帖子。浏览器无法辨别请求一个图片还是一个页面,所以,当用户打开含有上述标签的页面时,他将会从 an.example.com 登出。

    上面就是最原始的思想。有人可能会说,登出用户也不是什么严重问题,然而,我们发送一些 POST 数据其实也不是很麻烦的事情。

    为了避免 CSRF 攻击,你总是需要:

    遵循 HTTP 准则,比如 GET 不应该改变应用的状态。
    保证 Yii CSRF 保护开启。

    3 条回复
    回复于 2016-07-02 09:46 回复

    理解了谢谢,“遵循 HTTP 准则,比如 GET 不应该改变应用的状态。”

    回复于 2016-07-02 09:58 回复

    分给我,嘿嘿~~~~

    回复于 2016-07-02 21:59 回复

    sorry,忘记了

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
搞搞的传奇
见习主管

搞搞的传奇

注册时间:2015-02-24
最后登录:2020-06-04
在线时长:24小时46分
  • 粉丝8
  • 金钱5
  • 威望10
  • 积分345

热门问题