Kyl*_*yle 30 cookies session ruby-on-rails-4
我刚刚从Rails 3.2切换到Rails 4.我正在努力确保我在安全问题上尽可能快速,并且我现在关注会话.看起来Rails 4已经远离支持任何除了基于cookie的会话以外的任何东西,但听起来似乎不可能阻止基于cookie的会话永远存在.我一直在阅读几篇文章,但这篇文章是最正式的:http://guides.rubyonrails.org/security.html#session-expiry.请注意他们如何指出这是基于cookie的会话的问题,然后他们为基于数据库的会话(现在已经弃用,显然)提供了修复.
我真的很困惑.我希望能够阻止攻击者获得一个cookie,使他能够永久访问我的登录保护站点.显然我可以在initializers/session_store.rb中设置:expire_after,但除非我错了,只是设置客户端的cookie过期并且很容易被攻击者修改,以便会话可以永久存在.当然,我可以通过强制SSL,使用安全cookie和仅强制HTTP来使事情变得更好,但在我可以强制执行会话到期之前,这绝不是完整的防御.
当Rails弃用服务器端会话的唯一方法时,如何解决此问题?
我知道活动记录会话已被转移到gem并且仍然可用,但事实仍然是它已被弃用.应该可以在不引入更多依赖关系的情况下实现解决方案,或者至少不使用已弃用的功能.
Pat*_*ner 41
Rails有"防篡改"会话cookie.为了防止会话哈希篡改,从具有服务器端密钥的会话计算摘要并将其插入到cookie的末尾.只要确保你有一个长长的秘密.如果您想定期重置所有用户会话,请更改您的秘密.
要回答您的问题,如果您想为会话数据添加额外的超时,您可以执行以下操作:
session[:user_id] = user.id
session[:expires_at] = Time.current + 24.hours
Run Code Online (Sandbox Code Playgroud)
然后,在验证用户时,执行以下操作:
if session[:expires_at] < Time.current
# sign out user
end
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
Ner*_*orm 36
实际上rails继承自Rack::Session::Cookie.所以你可以expire_after在你的配置中配置参数session_store.rb.
Sqore::Application.config.session_store(
:cookie_store,
key: '_name_session',
expire_after: 24.hours
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23696 次 |
| 最近记录: |