Ser*_*sSy 7 security authentication cookies jwt
我正在使用 JWT 构建一个 Node Web 应用程序进行用户身份验证。
当用户提交正确的 ID 和密码时,我的服务器通过“Set-Cookie”在HTTP-Only cookie中发送 JWT ,但我对如何访问存储在 cookie 中的 JWT 感到困惑,以便在授权时可以将其包含在授权标头中API 请求。
如何从客户端访问 HTTP-Only cookie 以在向服务器发送 API 请求时包含它?
或者,通过让服务器在响应正文中发送 JWT 来完全不使用 cookie 是否安全?那么我可以通过将 JWT 放入客户端变量来使用它吗?这样,我相信该变量仅在用户关闭浏览器之前才有效。
我查找了很多资源,但无法找到我所困扰的这个问题的明确答案。
虽然有很多方法可以解决这个问题,但我建议客户端在每个请求上发送 JWT 两次:在 HttpOnly cookie 中,以及标头中Authentication:。
让我们检查一下每个解决的安全问题:
来自Mozilla 文档:
为了帮助减轻跨站脚本 (XSS) 攻击,JavaScript 的 Document.cookie API 无法访问 HttpOnly cookie;它们仅发送到服务器。
这是为了减轻跨站点脚本风险;想象一下您的网站有一个 XSS 漏洞——例如,我可以发表<script>some_code{..}</script>评论,任何查看我的评论的用户都会在他们的浏览器中运行我的代码。是的,攻击者的代码正在受害者登录的浏览器中运行,但由于该HttpOnly标志,它无法提取会话 cookie 并将其发送给攻击者。
Cookie 身份验证的问题在于,浏览器会自动将它们附加到 Cookie 所属域的任何请求,这允许跨站点请求伪造攻击。为了防止这种情况,通常的方法是通过 cookie 以外的方法(即在不同的标头中,或者可能在隐藏的 HTML 字段中)将会话令牌(在您的情况下是 JWT)发送到客户端。
如果客户端能够在下一个请求中将 JWT 令牌回显给您,则意味着他们能够读取之前的响应,并且不是进行盲注入 CSRF 攻击的攻击者。
将两者结合起来!
这两种方法有不同的目的:HttpOnly cookie 可以防止 XSS 攻击,而 Authentication headers 可以防止 CSRF 攻击。
组合它们的方法有很多,但它们都归结为将 JWT 放入某种身份验证标头中,将 sessionID 放入 cookie 中,并让服务器检查这些是否属于同一会话。重要提示:请记住,在您的网站上实现 XSS 的攻击者将能够读取 JWT,因此为了让 cookie 发挥其作用,cookie 应该是不包含在 JWT 中的单独值。(即,如果攻击者可以通过查看 JWT 找出正确的 cookie 值,则 cookie 不提供任何安全性)。
| 归档时间: |
|
| 查看次数: |
3878 次 |
| 最近记录: |