当前位置: 首页 > 知识库问答 >
问题:

next.js - 我是否应该使用httpOnly cookie?

东门翰
2024-08-16

在nextjs项目中,我把后端返回给我的access_token加密之后存储到了cookie里面

然后我设置httpOnly,但是当我想要在客户端axios里面去获得这个token的的时候,我拿不到。

我想要改变一下这个cookie的性质,改成客户端可以访问的。但是我看很多帖子说,这样不安全。

我现在有点犹豫,如果每次取得token还要发个网络请求去获得,那这个性能损失太大了,但是吧,我改成浏览器可以获取的cookie,我又怕有什么我不知道的攻击方式,出了问题就完了。

请问,客户端可以访问的cookie真的那么弱吗?我们平时前端存token在 localStorage里面不也是客户端可以获取的吗?

共有1个答案

朱通
2024-08-16

回答问题

是否应该使用httpOnly cookie?

是的,你应该继续使用httpOnly cookie来存储敏感信息如access_token

解释

  1. 安全性考虑

    • httpOnly Cookie 的主要目的是增加安全性。通过将 cookie 设置为 httpOnly,JavaScript 代码(包括在客户端执行的恶意脚本)将无法访问这些 cookie。这有助于防止跨站脚本攻击(XSS)中攻击者窃取 cookie。
    • 如果你将 token 存储在客户端可以访问的 cookie 或 localStorage 中,那么通过 XSS 攻击,恶意脚本可以轻易地读取这些 token,进而模拟用户身份或执行其他恶意操作。
  2. 性能考虑

    • 虽然每次需要 token 时都发送 HTTP 请求似乎会增加性能开销,但相比起安全漏洞的风险,这通常是可以接受的。现代网络性能通常能够处理这种开销,且 HTTP/2 和 HTTP/3 等协议进一步优化了网络请求的性能。
    • 你可以通过优化你的后端服务(如使用缓存、减少处理时间等)来减轻这种开销。
  3. localStorage vs. Client-Accessible Cookies

    • localStorage 和客户端可访问的 cookie 在安全性上都有类似的弱点:它们都可以被客户端的 JavaScript 访问。这意味着,如果网站受到 XSS 攻击,存储在这些位置的数据就可能被泄露。
    • 然而,与 localStorage 相比,客户端可访问的 cookie 还会通过 HTTP 请求发送到服务器,这可能会引入其他类型的漏洞,如 CSRF(跨站请求伪造)。
  4. 最佳实践

    • 对于敏感信息如认证 token,最佳实践是使用 httpOnly cookie 存储它们,并通过后端服务管理它们的验证和更新。
    • 如果你的应用确实需要在客户端存储某些状态(非敏感信息),可以考虑使用 localStorage,但务必确保这些信息不会泄露敏感数据或可以被轻易用于模拟用户身份。

结论

综上所述,你应该继续使用 httpOnly cookie 来存储 access_token,并接受通过 HTTP 请求获取 token 时的性能开销。这样做可以显著提高你的应用安全性,并减少因 XSS 攻击导致的数据泄露风险。

 类似资料:
  • 问题内容: 我知道该ValueEventListener线程在新线程中运行,是否应该在任何时间删除此线程以进行适当的线程管理?(例如,没有太多并行运行的线程)。如果是,该怎么办? 问题答案: 在谈论监听器时,是的,您需要根据活动的生命周期将其删除,为此,您需要使用以下代码行: 请记住,如果不这样做,最终将浪费您的电池和带宽。所以: 如果已在中添加了侦听器,则onStart必须在中将其删除onSto

  • AccessibilityService在系统的内存管理方面与普通服务有何不同? 我想问的是:系统可以为了节省内存而关闭AccessibilityService吗?如果可以,当您进入AccessibilityService时,您会看到它打开还是关闭?用户是否必须再次手动打开? 使用startForeground是否有助于使AccessibilityService保持活动状态? 在一个类似的问题中,

  • 问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果

  • 问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前

  • 问题内容: 我正在一个将Angular和Underscore都作为依赖项的项目。 当我需要创建对象的副本时,根据当时的心情,我可以使用或 在我看来,这些方法中的一种可能比另一种更快速/可靠/健壮。 假设已经包含两个库,那么这两个函数中的任何一个是否存在使另一个函数更好或更坏使用的已知问题? 问题答案: 关于您的问题: angular.copy和_.clone是不同的。这不是哪个更好的问题,而是关于

  • 问题内容: 我想从文本文件中读取每一行并将它们存储在ArrayList中(每一行是ArrayList中的一项)。 到目前为止,我知道BufferedInputStream写入缓冲区,并且仅在缓冲区为空时才进行另一次读取,这可以最大程度地减少或至少减少操作系统的操作量。 我正确吗-我说得通吗? 如果以上情况是在任何情况下,任何人都想使用DataInputStream。最后,我应该使用这两个中的哪一个