如何保证 Cookie 自动登录的安全性

2017-06-22 16:48:21 +08:00
 blessleroy

一般自动登录,也就是“ remember me ”的功能都是利用 Cookie 实现的,这里就涉及到一个问题,Cookie 里到底怎样存放数据才能保证系统的安全

看到很多简易的系统,直接保存了 Username 和 Password Hash,这样子设计在自动登录时可以直接传入数据库验证。但缺点是容易暴露系统的加密算法。

请结合你的项目谈一谈 Cookie 自动登录的系统设计

5340 次点击
所在节点    程序员
27 条回复
oh
2017-06-22 16:53:44 +08:00
哪个系统会去保存 Username 和 password hash 太扯淡了…
最简单的难道不是保存登陆之后的 session id 或者 token 吗
tony1016
2017-06-22 16:55:41 +08:00
简单一点,放个随机数,后端记录随机数是谁不就得了。注意定时清理
FrankFang128
2017-06-22 16:56:46 +08:00
用有时效的随机数
weyou
2017-06-22 16:57:49 +08:00
保存在 cookie 里等着被 CSRF ?
bravecarrot
2017-06-22 16:58:10 +08:00
客户端放 sessionid 不就可以了吗
服务端维护一个 hash 表
misaka19000
2017-06-22 16:58:12 +08:00
槽点太多,不知道怎么说了,还是楼下来帮帮楼主吧
imn1
2017-06-22 17:03:49 +08:00
哪个网站放 password hash 的?我马上去拦截
binux
2017-06-22 17:06:51 +08:00
remember me 不就是加大 cookie 的有效期吗?和普通的登陆有何区别?
pekingzcc
2017-06-22 17:35:29 +08:00
remember me 实现 可以这样简单理解 : 用户登陆后,服务端生成一个有时效性的 token,然后放回 cookie 中,下次登录直接验证 token,并生成一个新 token 覆盖。至于这个 token 是啥,简单的可以是个随机数,复杂点的会利用一个大的随机数以及加盐哈希共同验证,直接利用 Username 和 Password 做 hash 是很危险的,如果 lz 有使用这种方法,建议修改。
abcbuzhiming
2017-06-22 18:02:03 +08:00
敢把 password hash 放客户端。。。。
crayygy
2017-06-22 18:03:03 +08:00
一般存 token or session id,服务端检验
jarlyyn
2017-06-22 18:13:33 +08:00
这和 cookie 有啥关系…………

一般登录信息是通过 session 存的。

一段时间之前流行 cookie based session,也就是将数据加密存在 cooke 中。

但是,没见过 session 里存密码或者密码 hash 的。
eoo
2017-06-22 18:35:52 +08:00
PHP password_hash() 放 cookie 路过,会被打死吗?
gdsagdada
2017-06-22 18:40:44 +08:00
“看到很多简易的系统,直接保存了 Username 和 Password Hash,这样子设计在自动登录时可以直接传入数据库验证。但缺点是容易暴露系统的加密算法。”,你再搞个随机字段生成一个 uuid 不是从用户名来的不就得了吗?
v1024
2017-06-22 18:46:05 +08:00
将 cookie 对称加密,配合 secure-only,可以在客户端存任何信息
bumz
2017-06-22 19:59:17 +08:00
缺点是暴露系统的加密算法——就这一句话,你这帖子我没话说。
zpf124
2017-06-22 20:07:35 +08:00
看来我们的项目也应该被打死....

我们的方法是 存 username + 时间戳 + hash( username + passowd hash + 时间戳 + 内部自定义 key )
zpf124
2017-06-22 20:12:06 +08:00
另外 加密算法暴露了 没什么可怕的,除非你加密方法是 md5。

只要你的加密方法够高级,以现在的技术还远远无法破解就够了。

别人知道了你用的是 PBKDF2WithHmacSHA1 或者 bcrypt 又如何? 既不知道 salt 又不知道迭代次数谁能破解。
jybox
2017-06-22 20:12:59 +08:00
@v1024 重放攻击
ech0x
2017-06-22 21:48:54 +08:00
bcrypt 这种利用 hash 时间的将 password hash 放在 cookie 里的问题在哪里呢?如何解决呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX