【问题标题】:How can I restore a session from a Cross-Site Request where the session cookie uses SameSite?如何从会话 cookie 使用 SameSite 的跨站点请求中恢复会话?
【发布时间】:2020-03-11 01:07:57
【问题描述】:

Google have said 表示他们将在 2020 年 2 月默认将 SameSite=Lax 属性添加到 cookie。在准备过程中,我们已经开始测试使用 SameSite=Lax 和我们所有的 cookie,包括我们的会话 cookie (PHPSESSID)。

我们遇到了一个问题,我们将用户重定向到 WorldPay,以便他们添加银行账户。 WorldPay 然后将新帐户的详细信息发回我们的网站。问题是,因为这是一个跨站点请求,所以当用户返回我们的站点时,他们的浏览器不会加载会话 cookie,因此他们会退出我们的网站。

我只是想知道是否有解决此问题的最佳做法。 SameSite 防止跨站点请求伪造攻击。在我们的例子中,我们的跨站请求不是伪造或攻击,因此我们想做相当于将请求列入白名单。

我想我们可以在将用户发送到 WorldPay 之前将会话 ID 存储在数据库中,然后在用户返回时使用之前的会话 ID 恢复会话。当然,挑战在于知道回来的人和离开的人是同一个人。我想我们可以通过设置带有秘密令牌的SameSite=None cookie 来做到这一点,并在返回时重新检查该令牌。

这个问题一定是SameSite cookie 新时代的常见“问题”。我有兴趣听听您是如何解决的?

【问题讨论】:

    标签: security cookies csrf samesite


    【解决方案1】:

    SameSite=Lax 仅发送用于“安全”顶级导航的 cookie,这不包括POST。由于您在此处特别需要跨站点 cookie,因此应将其标记为 SameSite=None; Secure

    https://web.dev/samesite-cookie-recipes 有更多上下文,https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md 有 PHP 示例

    【讨论】:

    • 我同意,这将解决我们的问题。但我也想吃我的蛋糕;)。 IE。我想通过在 PHPSESSID 上设置 SameSite 来保护我们的网站免受 CSRF 攻击,但要根据具体情况弄清楚如何允许一些跨站点请求。
    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 2022-09-23
    • 1970-01-01
    • 2013-10-14
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多