Phoenix框架:恶意重用Session Cookie访问网站

问题描述 投票:0回答:2

对于初学者来说,我目前正在设置

Plug.Session
如下:

plug Plug.Session,
    store: :cookie,
    key: "_key",
    signing_salt: "SALT_HERE"

当用户注销时,他们点击:

def logout(conn, _) do
    conn
    |> configure_session(drop: true)
    |> redirect(to: "/login")
  end

所有登录/注销功能均有效,并且登录表单上会生成新的

_key
。我遇到的问题是,如果我在登录时复制
_key
的值,并在注销时通过 Chrome 调试器替换浏览器中的 cookie 值,我可以导航到无需登录即可直接获取 URL,然后可以像登录一样访问所有内容。

有什么好的方法可以解决这个问题吗?我意识到,在某人再次登录并生成新值之前获取登录者的

_key
值并使用它是非常困难的,但在浏览了一下之后,我找不到任何有关此的信息。

elixir phoenix-framework
2个回答
2
投票

解决这个问题的方法是将会话存储从 cookie 移至服务器端。当您拥有

store: :cookie
时,所有会话信息都存储在用户计算机上的 cookie 中。它使用服务器上的密钥进行加密。那个
|> configure_session(drop: true)
只是清除该用户的 cookie。如果您在服务器端将会话存储更改为 ets 或 redis,则用户的 cookie 只包含引用服务器上存储的会话数据的密钥,从而使您可以完全控制使会话失效。

可以帮助您完成此操作的示例包:https://github.com/thoughtbot/redbird


-1
投票

我也遇到同样的问题。我可以知道你是怎么解决这个问题的吗?

© www.soinside.com 2019 - 2024. All rights reserved.