首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这是在Next.js应用程序中防止CSRF攻击的有效方法吗?

这是在Next.js应用程序中防止CSRF攻击的有效方法吗?
EN

Stack Overflow用户
提问于 2022-08-10 23:10:23
回答 1查看 1.3K关注 0票数 1

我正在构建一个Next.js应用程序,在其中一个页面上,我需要调用一个/api路由。

调用此API路由执行状态更改操作,因此必须确保调用不是来自试图模拟我的用户的攻击者。

以以下为例:

代码语言:javascript
运行
复制
fetch('/api/grantPermissions', {
  headers: ...,
  method: 'POST',
  body: JSON.stringify({resource: 'someresourceid', permission: 'somepermission'})
})

我注意到保护Next.js API路由不受CSRF攻击的解决方案不多,所以我考虑的是:

  1. 当用户登录时,会生成一个随机的32字节十六进制字符串。
  2. 它存储在会话对象中(使用铁会话)。
  3. 使用getServerSideProps(),将存储在会话中的字符串注入需要进行提取调用的页面
  4. 当进行提取调用时,CSRF令牌与请求(例如在主体或自定义报头中)连接在一起。
  5. 然后,/api/grant路由检查所提供的CSRF令牌是否与会话中的令牌相同。

这是使用同步器令牌模式防止CSRF攻击的安全方法吗?这种方法会导致哪些漏洞?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-25 01:03:05

我会首先考虑如果为会话cookie设置SameSite=Lax足够好

这是使用同步器令牌模式防止CSRF攻击的安全方法吗?

四个可能的改进点:

  1. 对于CSRF令牌的旋转,会话必须无效。
  2. 随机的32字节十六进制字符串应该使用密码强伪随机数发生器生成。
  3. 您没有提到登录时的CSRF保护,这可以是减少会话固定攻击
  4. 看起来iron-session使用无状态会话,这意味着后端没有状态。这听起来像是双提交Cookie模式的用例。然而,iron-session似乎是使用加密和签名的cookie实现的。考虑到您信任铁会话,我认为如果您记得在检查会话cookie中的CSRF令牌是否与自定义请求标头中的CSRF令牌匹配之前,同步器令牌模式应该可以工作。

我喜欢你的做法:

如果您考虑了这四点改进,我相信您有一个更安全的同步器令牌模式的实现。然而,考虑到您的风险承受能力,如果它足够安全,我就不会回答。如果您还没有看到OWASP CSRF手册,请查看它。

这种方法会导致哪些漏洞?

  • CSRF保护可以是如果您有XSS漏洞,则绕过。
  • 每个会话令牌具有有效会话的时间范围,攻击者可以利用窃取的CSRF令牌进行攻击。
  • 你依赖iron-session

关于保护Next.js API路由不受CSRF攻击的现有解决方案:

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73313645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档