新手问题 发现一个安全问题 ,特殊条件下会发生的

kingwkb · 2013年06月09日 · 最后由 edokeh 回复于 2013年06月28日 · 2912 次阅读

本地开发环境

电脑 A 注册账号并登录,session 记录 user_id =1

清空数据库

电脑 B 注册账号并登录,session 记录 user_id = 1

此时,电脑 A 打开网站还是显示登录状态,但是显示是的电脑 B 注册的信息

这种虽然是在极端环境下才发生的,但是,但是。。。这样真的没问题吗?

你清了数据库 顺便把 secret_token 重置一下嘛

一般的设计 id 用自增量,B 注册的时候 id=2,而且不会清除数据库 你都能在清空数据库,这个时间显示不需要考虑安全的问题

#1 楼 @huobazi #2 楼 @ZombieCoder 既然是这样的话,那只要获取到用户登录后的 cookie,那随便在哪只有设置这个 cookie,就可以登录到用户账号了?

#4 楼 @Rei 恩,因为 rails 把 session 保存在了 cookie 中,这样就没有 session 过期这么一说了?只要拿到一次 cookie,那不管用户改密码也好还是做什么都没用了?

cookie 的有效期是存在客户端可以修改的

#5 楼 @kingwkb 是的,4 楼链接给出了很多方案怎么提供安全性。

#4 楼 @Rei #6 楼 @kingwkb

好像 ruby-china 的 session 里面除了 user_id 还有一个 salt 之类的是么?这样也可以预防这个问题。

生产环境中不会清除数据库。 测试环境中不介意安全问题(数据库的生杀大权都在你手中,还有什么安全可担心的呢,嘿嘿)

#7 楼 @Rei 我的意思是用 cookie 存储 session,过期时间的问题,上面的解决方案好像是用数据库存 session 才能设置过期

#10 楼 @kingwkb cookie_store, 可以在 session 里面存一个过期时间,然后在 application_conroller.rb 给所有 action 加一个前置过滤器检查过期时间,过期就清空。

#11 楼 @Rei 过期时间存在 session 里面,session 又是在 cookie 里面,这样不是用户可以修改 cookie 然后又是永远都不能过期了?

#12 楼 @kingwkb session 带有签名,用户改不了。

恭喜 LZ,已经看到了 Web 的本质了,加油

需要 登录 后方可回复, 如果你还没有账号请 注册新账号