存储“记住我”cookie 和 CSRF 保护

Posted

技术标签:

【中文标题】存储“记住我”cookie 和 CSRF 保护【英文标题】:Storing "remember me" cookie and CSRF protection 【发布时间】:2016-09-27 20:37:21 【问题描述】:

我一直在读到“记住我”cookie 存储在“httpOnly”cookie 中,因此 javascript/XSS 无法访问它们。但是,“httpOnly”cookie 容易受到 CSRF 攻击,因为它们是随请求自动发送的。

为了缓解 CSRF 攻击,建议使用同步令牌模式(让服务器生成 csrf 令牌并与客户端交叉检查)。

我的问题是,如果“记住我”cookie 可用,CSRF 攻击(恶意 JavaScript)是否有可能发出请求并随后获取从服务器生成的 csrf 令牌?问题是,如果攻击具有 cookie 以及随请求发送的令牌,那么应用程序的安全性就会受到损害。 如果这确实是可能的,我们如何防止这种情况发生?

【问题讨论】:

【参考方案1】:

不,由于Same Origin Policy,其他域无法读取令牌。

如果请求是在服务器端绕过 SOP 的,那么服务器不会从受害者的浏览上下文中获取令牌,因此这不能攻击登录用户(服务器只能攻击他们自己使用的用户获取令牌)。

因此,无需担心(当然,只要您没有启用 CORS)。

【讨论】:

以上是关于存储“记住我”cookie 和 CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章

如何安全实现“记住我”功能

PHP登录系统:记住我(持久cookie)[重复]

PHP记住cookie中的登录状态[重复]

记住我在 C# 中的持久性 Cookie

“记住我”功能的最佳实践?

Symfony2:记住我身份验证时无效的 CSRF 令牌