ruby-on-rails - 在 Rails 中实现 session

标签 ruby-on-rails ruby ssl

我正在尝试在 Rails 中滚动我自己的身份验证和 session ,但不确定我是否理解存在的 session 支持。 (首先,我的意思是我最初是通过 http 进行身份验证,而不是 https。生产代码将使用 https。)

我对安全 session 的理解是,您通过 SSL 通过 cookie 将 token 传递给浏览器,然后将该 token 与存储在服务器上的 token 进行比较,看看它是否真的是您认为的用户。我希望你们能检查一下我对安全 session 的理解,如下:

  1. 用户获取登录页面并提交登录名和密码(通过 SSL POST)。
  2. 服务器检查协议(protocol),然后根据数据库中现有的散列检查密码的 sha1(通常是 + salt)。如果它们匹配,则生成 session ID,将其与用户 ID 一起放入(n SSL)cookie 和服务器端 session 存储中。将用户重定向到网站的安全区域。
  3. 该 session ID 在整个用户登录 session 期间保持不变——或者——服务器在每次安全操作后发出一个新的 session ID,通过 SSL cookie 发送它并将新值存储在数据库中。
  4. 任何涉及私有(private)或安全数据的操作都会检查 session 存储中是否存在该用户的 session ID,如果存在,则在执行操作之前将 cookie 的 session_id 与 session 存储进行比较。如果我们要轮换 session ID,请在操作后发布一个新的 session ID(SSL cookie 和服务器端存储)。
  5. 用户注销,这会告诉服务器从 session 存储中删除 session ID 并清除 cookie。或者 cookie 在浏览器和/或服务器上过期,需要重新验证。

上面有没有明显的错误?此外,如果 cookie 中的 token 只是一个 session ID,那么 Rails 的 session[] 支持似乎无法阻止 MITM 攻击。对吗?

最佳答案

我建议看一下 restful_authentication。这是事实上的 Rails 标准身份验证库。

您实际上不需要自己生成 session_id ... Rails 会为您处理所有这些 - 根据浏览器提供的值检查 session id。实际上,您可以只将用户 ID 存储在 Rails session 集合中,然后检查它是否存在。

如果您不使用 SSL 连接,从技术上讲您很容易受到 MITM 攻击。

关于ruby-on-rails - 在 Rails 中实现 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/394673/

相关文章:

SSL 客户端证书需要特殊内容?

spring - 设置 Spring 4 RestTemplate 以使用 SSL (JKS)

ruby-on-rails - 如何强制采用表格形式的方法?

ruby - 删除相邻的重复子串

ruby-on-rails - 问题 : activerecord (rails3), 使用包含链接作用域

ruby - 了解在 Ruby 中与 lambda 一起使用的 inject 行为

ruby-on-rails - Rails schema.rb 中 sqlite_sp_functions 的用途是什么?

iis - 在不影响使用此证书的人的情况下,在 IIS 上续订 SSL 证书

javascript - Rails 应用程序在 javascript 中找不到 'destroy_user_session_path'

ruby-on-rails - rails : Cast string field to integer in where clause