例如,Rails Restful Authentication使用
User.find_by_id(session[:user_id])
找到用户作为第一次尝试。所以
作为附注
予。如果会话是作为cookie的session_id,并在数据库中查找会话信息,那么另一个人不能窃取cookie并伪装成该用户吗? (通过截取互联网流量窃取cookie)
II。或者,由于第三种选择是使用cookie auth_token
来检查字段remember_token
的users表,另一个人是否可以窃取
这个auth_token cookie假装是那个用户?
答案 0 :(得分:3)
Ruby on Rails Security Guide.必须阅读Cookie保密,会话劫持以及更多内容。
答案 1 :(得分:1)
从jdl的回答中,有一些段落:
客户端可以看到您在会话中存储的所有内容,因为它以明文形式存储(实际上是Base64编码的,因此未加密)。所以,当然,你不想在这里存储任何秘密。为防止会话哈希篡改,将从具有服务器端密钥的会话计算摘要并将其插入到cookie的末尾。
这意味着此存储的安全性取决于此秘密(以及摘要算法,默认为SHA512,尚未泄露)。所以不要使用琐碎的秘密,即字典中的单词,或短于30个字符的单词。把秘密放在你的环境中.rb:
config.action_dispatch.session = {
:key => '_app_session',
:secret => '0x0dkfj3927dkc7djdh36rkckdfzsg...'
}
注意:我不确定它是config.action_dispatch.session
还是config.action_controller.session
,或者Rails 3.0.1建议:DEPRECATION警告:config.action_controller.session
已被弃用。请改用Rails.application.config.session_store
。
答案 2 :(得分:0)
这不可能发生,因为会话只引用存储在服务器上的cookie。存储在用户浏览器上的唯一内容是一个id,然后用于从服务器上获取会话。因此,除非他们能够获得会话的加密,否则用户将无法系统地猜测我刚刚解释过的原因。
更改默认值以将会话存储在服务器而不是cookie
中