简书模拟登陆缺陷!!!
2018-06-11 本文已影响2人
柯西带你学编程
最近研究cookie和sso比较多,不知道你们有没有发现,你只要登录过简书,不logout,不clear cookie,重新打开页面的话,可以无需登录进入账号,于是激发了我强烈的好奇心做了以下测试,并发现了一个很神奇的问题,不知道简书如何定义这个问题,是bug还是符合预期?@简宝玉
一、当我们登录的时候,简书在我们浏览器写入了什么cookie?
- 未登录
- 登录后
发现登陆后多了两个cookie,分别是`remember_user_token`和`_m7e_session`,从字面意义上大概就是记录user token和sessionid的cookie
二、是否自动登录和这两个cookie有关系?实验如下:
- 关闭当前浏览器(浏览器未设置关闭时自动清除cookie),这个时候cookie还是存在的,打开浏览器进入jianshu,发现自动登录
- 手动将这两个cookie删除,关闭浏览器或者刷新页面,发现用户logout了
至此可以认定这两个cookie和简书的自动登录有关系(应该是远程的授权service做的验证)
三、remember_user_token
和 _m7e_session
是否可以复用?
- 前提:远程授权服务器认为该token和session是active的或者你没有主动logout
- 过程:尝试着两个不同的浏览器或者两个不同的机器,根据request请求是会将cookie待会给服务器的工作流程,我们手动将cookie
remote_user_token
和_m7e_session
使用console写入www.jianshu.com,你需要在已登录的cookie里边手动复制这两个cookie的值出来,因为你会看到他是httpOnly并且是Secure的,document.cookie无法获取,然后使用如下写去另一个浏览器未登录的jianshu首页中www.jianshu.com
document.cookie = "remember_user_token=你复制出来的值;path=/"
document.cookie = "_m7e_session=你复制出来的值;path=/"
此时浏览器就会多出两个cookie,由于不是在服务器端设置的HttpOnly和Secure,所以你会发现这两个值并没有打钩,不过没有关系,反正都会跟着request去到服务器端,这个时候你只需要重新刷新一下页面,就会发现自动登录了,不知道简书对这个问题怎么定义?
思考:在远程授权服务器认为我们的token和session失效之前,万一我们的reqeust被代理服务器抓包,并获取header中的两个cookie来手动写入cookie -> 发送请求 -> 自动登录。这样的场景不就很危险吗?@简宝玉
文章所有步骤都是经过实践检验并可行,若有问题,下方请评论,或者想要学习的也可以一起交流。