安全 Rails 的 Cookie 问题现在怎么样了

spacewander · 2015年03月10日 · 最后由 douxiance 回复于 2015年08月29日 · 6898 次阅读

今天发掘出了几篇旧闻。

Nearly 2000 Sites Vulnerable to Ruby on Rails Cookie Problem: https://threatpost.com/ruby-on-rails-cookiestore-vulnerability-plagues-prominent-websites/103038

How bad is rails' cookie system? http://pothibo.com/2013/10/how-bad-is-rails-cookie-system

Logout is broken by default in Ruby on Rails Web applications https://news.ycombinator.com/item?id=6545923

大体上是,Rails 的 Cookie 实现机制没有办法真正地清除掉客户端的 Cookie。

如果不是先看到了日期,我肯定会被吓呆了。还好这是一两年前的事情,那时候我还没使用过 Rails 呢。 不知道 Rails 的 Cookie 实现现在怎么样了?

你是对的。

Rails3 默认使用 CookieStore 来存储 session, 实际上就是 session 直接存在客户端,这样优点明显 ( 简单,服务端无须存储,分布式支持良好,性能高 ). 但无法真正使 session 失效。

Rails4 依然使用它,但默认进行了加密,这样客户端便无法真正取到 session, 除非知道 secret_key_base. 已经解决了重放攻击。

但总体来说,你看到的问题其实并不是什么问题,如果想清掉 session, 可以试试 authlogic, devise 之类的 gem, 它们处理的很好。一般的 cookie 不清又有何妨?

如果还不满意,试试:https://github.com/rails/activerecord-session_store, Rails 里面改一行就可以无缝切换到传统的 session 方案。

@lyfi2003 解释的很到位

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