雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

token存放在localStorage还是cookie里?

2024-11-26 27

在选择将令牌存放在 localStorage 或 cookie 时,需要综合考虑安全性、使用场景和潜在威胁。以下是对两种方式的对比分析,以及在不同场景下的建议。

1. 存放在 localStorage

优点:

易用性:localStorage 使用简单,数据存储持久,不会因页面刷新或关闭浏览器而丢失。

容量大:相比 cookie,localStorage 提供更多的存储空间(通常为 5-10MB)。

减少请求开销:令牌不会自动随每个 HTTP 请求发送,减少带宽消耗。

缺点:

易受 XSS 攻击:如果网站存在跨站脚本攻击 (XSS) 漏洞,攻击者可以通过脚本访问 localStorage 中的令牌。

适用场景:

单页应用 (SPA) 或无后端完全托管的应用。

需要频繁通过 JavaScript 直接访问令牌。

2. 存放在 cookie

优点:

内置安全选项:可以使用以下安全属性:

HttpOnly: 阻止 JavaScript 访问,防止 XSS 攻击。

Secure: 仅在 HTTPS 连接中传输。

SameSite: 防止 CSRF(跨站请求伪造)。

自动发送:浏览器会在请求时自动携带与目标域匹配的 cookie,简化验证流程。

缺点:

易受 CSRF 攻击:如果没有启用 SameSite 属性,可能面临 CSRF 攻击风险。

容量限制:单个 cookie 的大小限制为 4KB,且每个域名的总限制通常为 20 个 cookie。

适用场景:

需要服务器自动验证令牌的场景。

对安全性要求较高的应用,例如需要处理敏感用户数据。

推荐实践:结合使用

为了平衡安全性和易用性,可以结合两者的优点:

访问令牌(Access Token)存储在 localStorage:

用于短期的身份验证。在应用中需要频繁访问时使用。

刷新令牌(Refresh Token)存储在 cookie(HttpOnly):

通过后台接口安全地刷新 Access Token。使用 HttpOnly 属性防止 XSS 攻击。这种方法既能提升用户体验,又能降低安全威胁。

安全注意事项

防止 XSS:确保应用程序没有 XSS 漏洞,使用内容安全策略 (CSP) 限制外部脚本执行。

防止 CSRF:如果使用 cookie,务必设置 SameSite 属性为 Strict 或 Lax,并搭配 CSRF 令牌。

令牌加密:在存储令牌之前对其进行加密,以增加数据保护层。

设置过期时间:无论是 localStorage 还是 cookie,都要为令牌设置合理的过期时间。

更新于:1个月前
赞一波!

文章评论

评论问答