rest - 具有 CSRF 和 XSS 保护的无状态 REST API

标签 rest security jwt xss csrf

是否可以保护无状态 REST API 免受 XSS 和 CSRF 攻击?

目前,我使用存储在安全/httpOnly cookie 中的 JWT token 进行无状态身份验证。这应该可以保护 API 免受最常见的 XSS 攻击:使用注入(inject) XSS 的 JavaScript 窃取 cookie 并将其发送给攻击者。

然而,这并不能保护 API 免受 CSRF 攻击,在这种攻击中,攻击者会欺骗经过身份验证的用户跟随特定 Web API 调用的链接,以代表受害者启动不利交易。我如何保护 API 免受这种攻击 不引入服务器端状态 ?

另外,XSS 漏洞是否真的会在以下场景中继承允许 CSRF 类型的攻击: 注入(inject)的 JavaScript 会从客户端状态、DOM 或浏览器存储中检索 CSRF token ,并准备对服务器进行恶意的 ajax 调用。浏览器仍会自动为同一源请求包含 httpOnly cookie。除了首先防止 XSS 漏洞之外,还有什么方法可以防止这种情况发生?

最佳答案

您可以生成一个 token (例如 UUID)并将其放入 jwt token 以及将其发送回客户端。然后客户端在 header 中的每个请求期间发送它。然后服务器可以比较 header 中的 token 和 jwt token 中的 token ,以确保请求来自已验证的客户端。

关于rest - 具有 CSRF 和 XSS 保护的无状态 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52717793/

相关文章:

ios - 使用自定义加密系统覆盖 ATS 中使用的默认加密系统

php - 为什么要省略关闭标签?

javascript - 用于在客户端解码 JWT 的库

c# - 从 JWT 验证 User.Identity

python - FastAPI OAuth2PasswordRequestForm 依赖导致请求失败

php - MySQL 数据库中加密数据的通配符搜索?

java - 通过 REST 模板发送 json 文件时出现 415 不支持的媒体类型

java - 状态 403 来自 Postman 的 Post 请求中的 CSRF token 无效

security - 带有 REST 的基于角色的 Web UI

java - 如何使用 Unirest 等待所有异步 REST 调用完成?