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的图片上传是不是不对啊,弄不上去)
没区别啊,效果一样的。都是post方式注销的,防止低端的csrf攻击。
CSRF 是跨站请求伪造的缩写。这个攻击思想源自许多应用程序假设来自用户的浏览器请求是由用户自己产生的,而事实并非如此。
比如说:an.example.com 站点有一个 /logout URL
,当以 GET 请求访问时,登出用户。如果它是由用户自己操作的,那么一切都没有问题。但是,有一天坏人在一个用户经常访问的论坛发了一个 <img src="https://www.yiichina.com/docs/guide/2.0/http://an.example.com/logout">
内容的帖子。浏览器无法辨别请求一个图片还是一个页面,所以,当用户打开含有上述标签的页面时,他将会从 an.example.com
登出。
上面就是最原始的思想。有人可能会说,登出用户也不是什么严重问题,然而,我们发送一些 POST 数据其实也不是很麻烦的事情。
为了避免 CSRF 攻击,你总是需要:
遵循 HTTP 准则,比如 GET 不应该改变应用的状态。
保证 Yii CSRF 保护开启。
上传图片正常了,原来目录的权限不对。