ruby-on-rails – 会话和cookie如何在Rails中运行?
我一直在使用Devise来处理我的Rails应用程序上的身份验证,但从未真正理解它是如何工作的.因为Devise也使用Rails上的会话存储配置集,我假设这是一个关于使用Rails进行会话处理的问题.
基本上,我是一个新手.我已经阅读了一些关于身份验证的文章,但大多数都涉及抽象的库(他们谈论引擎,中间件等)对我来说没有多大意义.我真的在寻找较低级别的细节. 这是我目前所知道的…… 我知道cookie和会话. Cookie是存储在客户端的字符串,用于跨多个HTTP请求维护会话. 这是我对身份验证的基本理解(如果我错了,请纠正我): >当用户登录时,我们将SSL加密的请求发送到服务器.如果凭证有效,我们会在数据库(或任何其他数据存储)上保存一个名为session id的随机字符串作为与用户ID关联的有效会话ID.此会话ID会针对用户的每次登录/注销而更改. 这是我的问题: >我已经从Rails 2开始默认读取它现在使用CookieStore(而不是SessionStore),它使用SHA512(而不是会话ID)生成会话哈希,并且所有这些都存储在cookie中,这意味着多个用户ID可以字面意思有相同的会话哈希,它会工作正常.在我看来,这是一个非常危险的事情,使用存储在服务器上的单个密钥暴露大量哈希,并基于此密钥基于整个身份验证系统.是否存在使用散列而不是存储服务器端会话ID的真实世界大规模应用程序? 我知道我问了很多,但我相信这对于像我这样不了解身份验证的人会很有用,并且对于获得有关该主题的坚实基础非常有用. 解决方法
是的,乍一看似乎很可怕,但我不确定危险是什么.在Rails 4中,会话数据使用PBKBF2加密,然后使用您的会话密钥进行签名.此签名有助于检测加密会话的内容是否已被篡改,如果检测到篡改,服务器将拒绝该会话. https://cowbell-labs.com/2013-04-10-decrypt-rails-4-session.html 如果某人获得了会话令牌(用于签署会话cookie)的访问权限,那么您手上的问题可能比最终用户试图冒充错误用户的问题要严重得多.
老实说,我不知道这个问题的答案,但我怀疑这是Rails的“默认”这一事实意味着使用cookie会话商店的网站不止一些.
我现在正在服务器上执行此操作 – 基本上,当用户进行身份验证时会生成随机哈希,并且该哈希值会在cookie中存储,加密和签名. cookie哈希是服务器端数据存储区的密钥(在我的案例中是Redis,但它可以在关系数据库或内存缓存或任何你喜欢的内容中),实际的会话数据是映射到该密钥的存储服务器端.如果人们可以解密和分析它,那么客户端手中的会话数据就会减少,因此通常会更安全一些.
是的,你可以这样做,但这需要很长时间.您还需要猜测如何对新篡改的cookie数据进行签名,以使其与服务器期望看到的内容相匹配,并使用相当大的密钥进行签名. 我真的认为没有太多选择来保持身份验证状态使用cookie(我想如果你感觉异国情调并且不关心遗留浏览器支持,那么HTML5本地存储会起作用). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |