Ruby on rails 在RubyonRails中,使用User.find by_id(session[:User_id])标识用户的安全性如何?

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

例如,Rails Restful身份验证使用

User.find_by_id(session[:user_id])
在第一次尝试时查找用户。所以

  • 如果会话仅通过使用cookie来存储(这难道不是Rails的一个存储会话信息的选项吗?),那么不能使用用户id为12345的用户吗 将cookie的值从12345更改为12346并假装是另一个用户

  • 作为旁注

    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...'
    }