Ruby on rails 在RubyonRails中,使用User.find by_id(session[:User_id])标识用户的安全性如何?
例如,Rails Restful身份验证使用Ruby on rails 在RubyonRails中,使用User.find by_id(session[:User_id])标识用户的安全性如何?,ruby-on-rails,devise,authlogic,restful-authentication,Ruby On Rails,Devise,Authlogic,Restful Authentication,例如,Rails Restful身份验证使用 User.find_by_id(session[:user_id]) 在第一次尝试时查找用户。所以 如果会话仅通过使用cookie来存储(这难道不是Rails的一个存储会话信息的选项吗?),那么不能使用用户id为12345的用户吗 将cookie的值从12345更改为12346并假装是另一个用户 作为旁注 I.如果会话以会话id作为cookie,并在DB中查找会话信息,那么其他人不能窃取cookie并假装是该用户吗?(通过拦截互联网流量窃取coo
User.find_by_id(session[:user_id])
在第一次尝试时查找用户。所以
作为旁注 I.如果会话以会话id作为cookie,并在DB中查找会话信息,那么其他人不能窃取cookie并假装是该用户吗?(通过拦截互联网流量窃取cookie) 二,。或者,由于第三种选择是使用cookie
auth_token
检查用户表中的字段memory_token
,因此其他人可以偷窃吗
此身份验证令牌cookie并假装是该用户?cookie安全、会话劫持等都包含在“它是必须读取的”中。这不能发生,因为会话只引用存储在服务器上的cookie。用户浏览器上存储的唯一内容是一个id,然后用于将会话从服务器上删除。因此,除非他们能够获得会话的加密,否则用户将无法系统地猜测id,原因我刚才解释过 更新
将默认值更改为将会话存储在服务器上,而不是存储在cookie中。根据jdl的回答,这里有一些段落: 客户端可以看到会话中存储的所有内容,因为它是以明文形式存储的(实际上是Base64编码的,所以不是加密的)。所以,当然,你不想在这里存储任何秘密。为了防止会话散列篡改,从会话中计算一个摘要,并将其插入到cookie的末尾 这意味着这个存储的安全性取决于这个秘密(以及摘要算法,它默认为SHA512,它还没有被泄露)。因此,不要使用一个微不足道的秘密,即字典中的一个单词,或少于30个字符的单词。将秘密放入您的环境中。rb:
注意:我不确定它是
config.action\u dispatch.session
还是config.action\u controller.session
,或者Rails 3.0.1建议:弃用警告:config.action\u controller.session
已弃用。请改用Rails.application.config.session\u store
。Rails中的默认行为是将整个会话存储在cookie中。您可以选择将其存储在服务器上。但即使如此,cookie还是由rails应用程序生成时生成的密钥进行加密,AFAIK@Gareth你的意思是很难伪造会话[:user\u id]
因为它是加密的或是用加密校验和加密的,所以它是另一种东西吗?但是你对这个问题有一个简短的答案吗?我正要把这个添加到我的答案中。但你不会谈论违约。
config.action_dispatch.session = {
:key => '_app_session',
:secret => '0x0dkfj3927dkc7djdh36rkckdfzsg...'
}