【问题标题】:What's the best way to obfuscate non-sensitive cookie data in Rails? [closed]在 Rails 中混淆非敏感 cookie 数据的最佳方法是什么? [关闭]
【发布时间】:2020-03-04 21:58:12
【问题描述】:

我正在尝试实现 DHH 在此处描述的一些功能:

来源:https://signalvnoise.com/posts/3112-how-basecamp-next-got-to-be-so-damn-fast-without-using-much-client-side-ui

由于用户 ID 在 URL 中可见,因此它不是真正的敏感数据。我是否认为如果我要将其存储在 cookie 中,应该以某种方式对其进行混淆以防止用户轻易篡改它?

在 Rails 中混淆此类数据然后在 JavaScript 中检索它的最佳方法是什么?

【问题讨论】:

  • rails session cookie 在客户端上是不可解析的——它是在服务器端加密的,所以如果你使用它,你不需要做任何额外的混淆。这就是为什么 Rails 服务器可以轻松地从会话中查找当前用户
  • 这并不能真正回答问题:)。我的问题与会话 cookie 无关。

标签: javascript ruby-on-rails ruby


【解决方案1】:

混淆它不是正确的答案,因为无论您对值做什么,它仍然需要在客户端中可读,并且客户端没有真正的秘密。这只是默默无闻地使这种安全性变得毫无实际价值。

虽然 Rails 有两个 encrypted and signed cookies,但它们都使用你不想暴露给客户端的 secret_key_base。

您想要做的是确保将其设为与实际会话 cookie 分开的 cookie,该 cookie 存储用于身份验证的用户 id 并在每次请求时重置它。不要将它用于前端以外的任何东西,并且始终依赖于后端的加密会话存储(cookie)。

一个简单的实现:

class ApplicationController
  before_action :set_user_cookie, if: :user_signed_in?

  def set_user_cookie
    cookies[:x_current_user] = current_user.id
  end
end

如果您使用的是 Devise/Warden,您可以使用 one of the hooks 来执行此操作,而不是在您的 ApplicationController 中执行此操作。

即使用户篡改了 cookie,唯一的结果就是他们将另一个用户从列表中排除。

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多