news 2026/6/10 17:12:00

Web前端 认证token的安全存储策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Web前端 认证token的安全存储策略

目录

方案概述

核心思路:

架构设计:

三层存储策略:

风险接受说明:

接受的风险:

防御的风险:

一句话部署:

🛡️ Next.js XSS 防御终极方案

一、必须做的3件事(核心防御)

1. 永远不用或净化 dangerouslySetInnerHTML

2. API Routes 必须验证输入

3. 配置CSP安全头

二、4个绝对禁止

❌ 永远不要用这些:

三、3个必须验证

用户控制的跳转/加载必须验证:

四、开发习惯2条

1. 数据只通过React传递

2. 第三方库配置安全选项

五、检查清单(部署前)

一句话总结:


前言:最安全的方案不一定用户体验最优,需根据合适的场景选择安全策略。

这里,我主要针对大多数常规业务场景下的实施方案进行分析。这些方案通常不适用于银行、金融、支付等高安全性场景,因为这类场景通常需要进行二次生物验证或其他安全性较强但可能影响用户体验的验证措施。

方案概述

核心思路:

用短期内存token保证安全,用长期refresh_token保证体验,用XSS防御保证token不通过代码窃取。

架构设计:

三层存储策略:

🔐 第一层:access_token → sessionStorage(15分钟)
- 页面关闭自动清除
- XSS难窃取(短暂窗口)

🔐 第二层:refresh_token → localStorage(30天)
- 接受扩展窃取风险
- 用户可手动清除

🔐 第三层:关键操作 → 二次验证
- 支付、改密等需要额外验证

双重刷新机制:

🔄 主动刷新:每14分钟自动刷新access_token
🔄 被动刷新:401时自动用refresh_token换新token
🔄 无缝体验:用户无感知,保持30天免登录

XSS全面防御:

✅ Next.js自动转义所有JSX
✅ CSP阻止外部脚本加载
✅ 禁止dangerouslySetInnerHTML(或必须净化)
✅ API层输入验证
✅ 绝不使用eval/innerHTML

风险接受说明:

接受的风险:

  1. 浏览器扩展可能读取localStorage(用户已同意安装)

  2. 用户电脑木马可能窃取token(超出Web防护范围)

  3. 物理接触电脑可能获取token(用户责任)

防御的风险:

  1. 网站XSS攻击(通过严格CSP和Next.js防护)

  2. CSRF攻击(SameSite Cookie + 后端验证)

  3. Token长期泄露(access_token仅15分钟有效)

  4. 重放攻击(JWT jti + 短期有效期)

一句话部署:

sessionStorage存15分钟access_token,localStorage存30天refresh_token,配置严格CSP,定期npm audit。

🛡️Next.js XSS 防御终极方案

一、必须做的3件事(核心防御)

1. 永远不用或净化dangerouslySetInnerHTML

2. API Routes 必须验证输入

// pages/api/xxx.js 或 app/api/xxx/route.js export default function handler(req, res) { const { content } = req.body; // 必须验证 if (!content || typeof content !== 'string') { return res.status(400).json({ error: 'Invalid input' }); } // 存储前转义 const safeContent = escapeHtml(content); // ...保存到数据库 }

3. 配置CSP安全头

// next.config.js(一次性配置) module.exports = { async headers() { return [{ source: '/(.*)', headers: [ { key: 'Content-Security-Policy', value: "default-src 'self'; script-src 'self';" } ] }]; } };

二、4个绝对禁止

❌ 永远不要用这些:

1. element.innerHTML = ... 2. document.write(...) 3. eval(userCode) 4. new Function(userCode)

三、3个必须验证

用户控制的跳转/加载必须验证:

// 1. URL跳转 if (url.startsWith('/') || url.startsWith('https://yourdomain.com')) { window.location.href = url; } // 2. iframe/src属性 const allowedDomains = ['https://youtube.com']; const isSafe = allowedDomains.some(d => url.startsWith(d)); // 3. 动态脚本 // 不要创建和执行用户提供的脚本

四、开发习惯2条

1. 数据只通过React传递

// ✅ 好习惯 const [data, setData] = useState(''); useEffect(() => { const raw = localStorage.getItem('data'); setData(raw); // React自动转义 }, []); // ❌ 坏习惯 useEffect(() => { const raw = localStorage.getItem('data'); document.getElementById('output').innerHTML = raw; // 绕过React }, []);

2. 第三方库配置安全选项

// 如markdown解析器 new MarkdownIt({ html: false, // 禁止HTML标签 xhtmlOut: true });

五、检查清单(部署前)

✅ CSP安全头已配置
✅ 没有使用未净化的 dangerouslySetInnerHTML
✅ API Routes 都有输入验证
✅ 没有使用 innerHTML/document.write/eval
✅ 用户跳转链接都验证了域名
✅ 运行 npm audit 无高危漏洞
✅ 所有依赖都是最新版本
✅ HTTPS已启用

一句话总结:

在Next.js中,只要:

  1. 不用(或净化)dangerouslySetInnerHTML

  2. API Routes验证所有输入

  3. 配置CSP安全头

  4. 绝不使用 innerHTML/eval

其他时候React自动保护你,XSS风险极低。

总之,在配置和代码中进行预防,安全意识少不了。

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

科哥优化版Z-Image-Turbo,中文用户福音来了

科哥优化版Z-Image-Turbo,中文用户福音来了 1. 这不是另一个“能跑就行”的WebUI,而是专为中文用户打磨的图像生成利器 你有没有试过在AI绘图工具里输入“水墨江南小桥流水”,结果生成一张带着英文水印、人物比例失调、连“桥”都歪斜的图&…

作者头像 李华
网站建设 2026/6/10 12:50:41

SenseVoice Small应用场景:无障碍服务视障用户语音转文字助手

SenseVoice Small应用场景:无障碍服务视障用户语音转文字助手 1. 为什么视障用户需要专属的语音转文字工具 对视障朋友来说,日常生活中最基础的信息获取方式不是“看”,而是“听”和“说”。但光靠听还不够——当一段重要语音信息无法被准确…

作者头像 李华
网站建设 2026/6/10 16:13:43

GLM-4V-9B多场景落地:电商商品图解析、教育题图问答、医疗影像初筛

GLM-4V-9B多场景落地:电商商品图解析、教育题图问答、医疗影像初筛 你是否遇到过这样的问题: 想用多模态大模型看懂一张商品图,却卡在环境配置上? 想让AI帮孩子分析数学题配图,结果模型把图片当背景乱输出&#xff1f…

作者头像 李华
网站建设 2026/6/10 12:31:26

局域网幽灵:90年代游戏在Win11复活的技术密码

局域网幽灵:90年代游戏在Win11复活的技术密码 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 在Windows 11系统中,许多经典的90年代游戏如《红色警戒2》《暗黑破坏神》等面临着无法联机的困境&#xff0c…

作者头像 李华
网站建设 2026/6/10 10:36:39

零基础玩转GoView:数据可视化开发平台实战指南

零基础玩转GoView:数据可视化开发平台实战指南 【免费下载链接】go-view GoView 说明文档,GoView 是一个低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。 它的技术栈为:Vue3…

作者头像 李华
网站建设 2026/6/10 14:33:17

DeepSeek-R1-Distill-Qwen-7B实战案例:Ollama部署AI合同关键条款提取系统

DeepSeek-R1-Distill-Qwen-7B实战案例:Ollama部署AI合同关键条款提取系统 1. 引言:合同处理的智能化需求 在商业活动中,合同审核是每个企业都面临的常规工作。传统的人工审核方式不仅耗时费力,还容易遗漏关键条款。以一份20页的…

作者头像 李华