jwt - 这个 JWT 实现是否可以防止 XSS 和 CSRF 攻击,同时仍然允许我访问有效负载?
问题描述
我正在为我的 Web 应用程序实现 JWT 身份验证和授权,并且可以使用一些帮助来识别我的方法中的漏洞。我见过许多方法,它们只是简单地说将访问令牌设置为 httpOnly cookie,但是,我的访问令牌中有我的前端需要访问的声明。我想出了这种方法来解决这个问题。
登录时,用户提供用户名和密码以换取以下几项:
- CSRF 令牌
- JWT 访问令牌的标头和签名
- JWT 访问令牌的有效负载
- JWT 刷新令牌
在我的方法中,所有这些项目都设置为 cookie。JWT 刷新令牌以及 JWT 访问令牌的标头和签名都存储在 httpOnly 安全 cookie 中。JWT 访问令牌的有效负载只是存储为常规的旧 cookie,以便我的前端可以访问它(我没有在此令牌中存储任何个人/不安全信息)。
例如,如果我的 JWT 访问令牌是header.payload.signature
,那么我将访问令牌拆分为header.signature
和payload
。这些值存储在各自的 cookie 中。
是时候发出需要授权的请求了,我的后端会抓取所有 JWT 访问令牌 cookie,将它们重新组合在一起,然后检查签名。
这种方法是否可以缓解 XSS 和 CSRF 攻击,同时仍然提供对 JWT 有效负载的安全访问?
解决方案
听起来这行不通。从根本上说,您的代码可以访问的任何内容,攻击者代码也可以访问。所以,你不想要任何“我的前端可以访问”的东西。正如我所见,唯一能提供最佳覆盖范围的组合:
- HttpOnly+Secure+SameSite cookie(Mozilla 文档)
- 使用 CSRF 令牌保护 POST/PUT/DELETE
- 防止注入脚本的内容安全策略
除此之外,越简单越好。试图推出一个聪明的解决方案是坏事的秘诀。
推荐阅读
- python - 将文件从一个目录复制并覆盖到另一个目录,其中包含具有相同文件名python的文件的子目录
- r - 通过 R-CMD-check 在 R Mac OS 中安装 rgl 包
- python - Github 致命错误
- java - 如何使用 Mockito 在函数内模拟查询
- android - 如何在矩形可绘制对象上添加顶部阴影
- eslint - 期望一个赋值或函数调用,而是看到一个表达式 [ESLINT]
- html - 文本的背景颜色
- python - 试图在散点图中绘制 X 和 y 变量
- sql - 是否可以在一个 oracle 表中使多个列组合唯一?
- python-3.x - 如何使用 Python3 中的 biopython 库从 TB 测序 fasta 文件中找到反向基因(如 pncA)的突变?