我有一个JWT存储如下,我想知道-有一个future 30天的到期日期,并将JWT存储在Cookie中是否安全?

我希望它比一个会话持续更长的时间,类似于一些网站的"让我保持登录"功能.

我设置了samesite:Strong和httpOnly来缓解XSS和CSRF.

我正在使用NextJS

let resp = NextResponse.json({v:"returnedJSON"})

var date = new Date();
date.setTime(date.getTime() + (30 * 24 * 60 * 60 * 1000));             // in milliseconds ==30d

resp.cookies.set('token', jwtTokenString, {
    httpOnly: true,
    path: '/',
    secure: true,
    expires: date,
    sameSite: 'strict'           
});

推荐答案

这听起来像是一个很好的解决方案,但它实际上取决于您的应用程序和风险偏好.我通常推荐OWASP CSRF Prevention Cheat Sheet,它有以下基本原则:

  • 首先,判断您的框架是否具有内置的CSRF保护并使用它
  • 如果框架没有内置的CSRF保护,则向所有状态更改请求(导致操作的请求)添加CSRF令牌 站点)并在后端进行验证
  • 有状态软件应该使用同步器令牌模式
  • 无状态软件应使用双重提交Cookie
  • 如果API驱动的站点不能使用标记,请考虑使用自定义请求头
  • 在深度缓解部分实施至少一项防御缓解
  • SameSite Cookie属性可用于会话Cookie,但请注意不要专门为域设置Cookie.此操作 引入安全漏洞,因为它的所有子域 域将共享Cookie,如果 子域具有不在您控制范围内的域名的CNAME.
  • 考虑为高度敏感的操作实施基于用户交互的保护
  • 考虑使用标准头验证源
  • 请勿将GET请求用于状态更改操作.
  • 如果出于任何原因,请保护这些资源不受CSRF的影响

Javascript相关问答推荐

用相器进行向内碰撞检测

我在这个黑暗模式按钮上做错了什么?

如何最好地从TypScript中的enum获取值

在页面上滚动 timeshift 动垂直滚动条

Rehype将hashtag呈现为URL

将字符串UTC Date转换为ngx—counting leftTime配置值的数字

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

如何从隐藏/显示中删除其中一个点击?

保持物品顺序的可变大小物品分配到平衡组的算法

Reaction Native中的范围滑块

对路由DOM嵌套路由作出react

基于props 类型的不同props ,根据来自接口的值扩展类型

如何防止ionic 输入中的特殊字符.?

令牌JWT未过期

OnClick更改Json数组JSX中的图像源

如何修复错误&语法错误:不能在纯react 项目中JEST引发的模块&之外使用导入语句?

我怎样才能点击一个元素,并获得一个与 puppeteer 师导航页面的URL?

更改管线时不渲染组件的react

在每次重新加载页面时更改指针光标

MAT-TREE更多文本边框对齐问题