gpt4 book ai didi

ruby-on-rails - 使用登录时生成的签名 cookie 来识别 ActionCable 中的当前用户是否安全?

转载 作者:行者123 更新时间:2023-12-04 03:17:21 24 4
gpt4 key购买 nike

我正在 Rails 5 中创建一个即时消息传递应用程序以了解 ActionCable,并且我正在尝试了解如何确保用户安全地连接到 channel 并从 channel 流式传输。

当用户订阅时,他们会从他们的用户 ID 指定的 channel 流式传输。此用户 ID 是从用户登录应用程序时生成的签名 cookie 中获取的。 (该签名 cookie 由 connect 中的 ActionCable::Connection 方法分配给一个 current_user 变量,该变量又被 subscribed 中的 ChatChannel 方法用来指定用户从中流式传输的 channel 。)

我的问题大致是这是否安全。

具体来说:

  • 是否可以假设已签名的 cookie 用于定义 current_user (从而确定用户从哪个 channel 流式传输)肯定是用户登录时生成的签名cookie?或者是否可以登录,然后使用在应用程序外部生成的 cookie 连接到 ActionCable Connection?如果此“连接”是常规 HTTP 请求,则包含用户 ID 的签名 cookie 不足以证明是该用户发出请求;
  • 有人可以更改 current_user 吗?变量 ActionCable 连接建立后 - 到不同用户的 ID - 这样他们就可以订阅不同的 channel ?
  • 用户需要登录才能访问应用程序的索引操作(呈现消息传递界面),但他们是否可以在不访问索引操作的情况下连接到 ActionCable Connection,因此无需登录,并使用外部生成的不同签名 cookie包含用户 ID 的应用程序? (App.cable.subscriptions.create "ChatChannel" 在索引页面呈现时调用,但是如何防止未登录的人调用它?)

我正在使用 Devise 让用户登录,并且只是添加到默认 session 方法以生成用于设置 ActionCable::Connect current_user 的签名 cookie。 :

def create
super do |user|
cookies.signed[:user_id] = user.id if user_signed_in?
end
end

最佳答案

我在 ActionCable 文档中遇到了这个问题,并且单独使用用户 ID 来验证任何东西都引起了一些警钟!

就我个人而言,我会将用户 ID 与 token 一起存储在已签名的 cookie 中,该 token 会在一定时间后和注销时过期。但我要补充的最重要的事情是确保为整个站点安装 SSL。

最基本的 session 劫持类型,即在公共(public)不安全网络上使用数据包嗅探器获取 session key 的人应该通过在整个站点上正确安装 SSL 证书来缓解。

如果攻击者可以访问机器并且可以获取 session cookie 以及任何其他 cookie,在我看来,我们已经失败了,正如您所说,在登录时设置过期可能是限制的最佳方式损害。

您还可以:

  • 检查每个请求的 IP 以确保它来自同一个地方(仍然容易受到欺骗)。
  • 检查浏览器的用户代理以确保它是相同的机器和浏览器类型(再次,欺骗)。
  • 限制用户一次只能进行一个 session 。

但这些选项不是很有效,并且会影响用户体验。这么说吧,如果用户没有设置基本的客户端安全;比如他们的操作系统上的密码保护,或者他们让恶意的人进入他们的机器,那么不幸的是,违规的责任在他们的肩上,而不是你的肩上。

我对最流行的基于 session 的网站如何处理这个很感兴趣,并想看看 session 劫持自己有多容易,所以看看我们正在做的 Facebook,发现这种保护用户的非常有趣的方法;

enter image description here

关于ruby-on-rails - 使用登录时生成的签名 cookie 来识别 ActionCable 中的当前用户是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com