我是否需要在基于 cookie 的 API 中使用 CSRF 令牌?

Arc*_*giz 2 security csrf next.js next-auth

我在 Next.js (NextAuth.js) 中有一个 API,只有前端会使用它。它使用 cookie 进行身份验证。我的问题是恶意网站是否可以使用 CSRF 更改用户的数据?我应该实施 CSRF 令牌还是可以在没有它的情况下阻止恶意网站更改数据?

Gab*_*yel 6

如果身份验证基于浏览器通过请求自动发送的内容(例如 cookie),那么是的,您很可能需要针对 CSRF 的保护。

您可以自己尝试一下:在一个源上设置一台服务器(例如 localhost:3000),并在另一个源上设置攻击者页面(例如 localhost:8080,它与不同的域相同,由攻击者控制)。现在在 :3000 上登录您的应用程序,并在您的攻击者源上创建一个页面,该页面将向 :3000 发布一些更改数据的内容。您将看到,虽然 :8080 将不会收到响应(因为同源策略),但 :3000 确实会收到并处理请求。无论用户从何处发出请求,它还将接收设置为 :3000 的 cookie。

为了缓解问题,您可以实现同步器令牌模式(csrf 令牌)、双重提交,或者您可以决定依赖 cookie 的 SameSite 属性,旧浏览器不支持该属性,但相当新的浏览器支持该属性,因此有一些风险,具体取决于您的用户是谁。