JWT 存在 localStorage 会被 XSS 攻击吗? 上官莉娟 提问于 2026-02-25 09:15:16 阅读 14 前端 我最近在项目里用 JWT 做用户认证,把 token 存在了 localStorage 里,但听说这样容易被 XSS 攻击偷走。我试过改成存 cookie,但又担心 CSRF 问题,到底该怎么安全地存 JWT 啊? 前端安全 我来解答 赞 7 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 Code°世英 Lv1 确实,localStorage 存 JWT 是个经典坑,XSS 一中招 token 就没了,连哭都来不及。 你提到的两个方案——localStorage 和 cookie——各有各的坑,但别慌,WordPress 下有成熟解法。 核心思路是:用 httpOnly + secure 的 cookie 存 token,再配合 nonce 防 CSRF,别自己造轮子。 WordPress 自带的 wp_create_nonce 和 wp_verify_nonce 就是干这个的。你后端认证时发 JWT 的同时,再生成一个 nonce,前端每次请求时把 nonce 当作 header 或 query 参数带上去,后端用 wp_verify_nonce 校验就行。这样 CSRF 就基本堵住了。 另外,别用原生 fetch 或 jQuery.ajax 直接写,用 WordPress 提供的 wp.apiFetch(WP 5.6+)或 wp.ajax,它们默认会带上 nonce,省心不少。 至于 cookie,记得设置 Set-Cookie: token=xxx; HttpOnly; Secure; SameSite=Strict,SameSite 最好别用 Lax,Strict 更安全,虽然会影响跨站 GET 请求,但 JWT 场景下 POST/PUT/DELETE 才是常态,影响不大。 最后提醒一句:别在前端 JS 里直接操作 token(比如 localStorage.getItem('jwt')),那等于把命门交给 XSS。你只要让 cookie 自动带过去,JS 完全不碰它,就安全多了。 真要上生产,记得再扫一遍 XSS 漏洞,比如用户评论区有没有过滤 HTML,插件有没有注入未转义的 JS——这些比存 token 的地方更致命。 回复 点赞 1 2026-02-25 10:00 加载更多 相关推荐 2 回答 51 浏览 前端用JWT时,如何防止Token被XSS攻击窃取? 我在项目里用localStorage存JWT token,但同事说这样容易被XSS攻击,我试过把token加密存进去,但后端验证时解密失败了。现在改成用httpOnly的cookie,但axios发请... 百里国娟 前端 2026-02-09 16:08:30 2 回答 53 浏览 前端用localStorage存Refresh Token被恶意调用,怎么防? 我在项目里用JWT方案,把Refresh Token存在localStorage里,但测试时发现如果前端页面被XSS攻击,Refresh Token会被直接窃取。虽然Access Token设置了短时... 淑怡酱~ 安全 2026-01-26 22:16:23 2 回答 24 浏览 前端被XSS攻击了,应急响应该怎么做? 我们线上 Vue 项目突然收到用户反馈,页面里弹出了奇怪的 alert,怀疑是 XSS 攻击。我看了下代码,确实有个地方直接用了 v-html 渲染用户输入的内容,但之前没做任何过滤。现在想知道:一旦... 设计师红芹 安全 2026-02-24 19:23:19 1 回答 14 浏览 前端如何安全地处理用户输入避免XSS攻击? 我在做一个评论功能,用户提交的内容直接用 innerHTML 插入到页面,结果被安全扫描工具报了 XSS 风险。我试过用 DOMPurify,但不确定是不是用对了,比如下面这样写安全吗? const ... 丽萍(打工版) 安全 2026-03-05 21:53:18 2 回答 14 浏览 前端漏洞扫描工具报XSS风险,但我用了DOMPurify啊? 最近用公司内部的漏洞扫描工具扫了下项目,结果提示有个输入框存在XSS风险。可我明明已经用 DOMPurify 对用户输入做了清洗,不知道问题出在哪。 我的代码大概是这样: <div id="us... 振莉 Dev 前端 2026-02-28 20:08:20 1 回答 105 浏览 前端应急响应时如何快速定位XSS漏洞的攻击入口? 最近在处理一个紧急安全事件,发现有人利用表单提交功能注入了XSS脚本。我们用了OWASP ZAP扫描,但始终找不到具体漏洞点。前端代码里有个动态渲染的评论区,像这样: <div id="comm... 慕容昕彤 安全 2026-02-19 09:06:33 1 回答 32 浏览 移动端如何防止LocalStorage数据被恶意读取? 我在开发一个电商H5页面,需要把用户ID和token存在localStorage里。但测试时发现如果用户访问过恶意页面,攻击者能通过XSS直接读取这些数据。我试过用AES加密存储值,但不确定这样够不够... 公孙祎芮 移动 2026-02-13 03:06:22 1 回答 27 浏览 Nessus扫描显示React组件存在XSS漏洞,但代码已经过滤输入了怎么办? 大家好,我在用Nessus扫描公司前端项目时,发现一个React组件被标记为XSS漏洞。但代码明明已经用了DOMPurify过滤输入,这是怎么回事? 我的代码是这样的: import DOMPurif... 设计师锦灏 安全 2026-02-10 12:07:31 2 回答 67 浏览 SAST扫描总报React组件XSS漏洞,但代码明明转义了怎么办? 最近给React项目配置了SAST工具,扫描时总提示组件存在XSS风险。代码里已经用dangerouslySetInnerHTML包裹了sanitization函数处理的数据,为什么还是报这个漏洞? ... 长孙奕冉 安全 2026-01-25 21:37:24 1 回答 5 浏览 Acunetix扫出JS里的XSS风险,但我这代码真有问题吗? 最近用 Acunetix 扫我们前端项目,报了个“Reflected XSS”高危漏洞,定位到一段动态拼接 URL 的 JS 代码。我看了半天觉得只是普通跳转,没往 DOM 里插内容啊,怎么就成 XS... 欧阳雨路 安全 2026-03-05 17:19:21
你提到的两个方案——localStorage 和 cookie——各有各的坑,但别慌,WordPress 下有成熟解法。
核心思路是:用 httpOnly + secure 的 cookie 存 token,再配合 nonce 防 CSRF,别自己造轮子。
WordPress 自带的
wp_create_nonce和wp_verify_nonce就是干这个的。你后端认证时发 JWT 的同时,再生成一个 nonce,前端每次请求时把 nonce 当作 header 或 query 参数带上去,后端用wp_verify_nonce校验就行。这样 CSRF 就基本堵住了。另外,别用原生
fetch或jQuery.ajax直接写,用 WordPress 提供的wp.apiFetch(WP 5.6+)或wp.ajax,它们默认会带上 nonce,省心不少。至于 cookie,记得设置
Set-Cookie: token=xxx; HttpOnly; Secure; SameSite=Strict,SameSite 最好别用 Lax,Strict 更安全,虽然会影响跨站 GET 请求,但 JWT 场景下 POST/PUT/DELETE 才是常态,影响不大。最后提醒一句:别在前端 JS 里直接操作 token(比如
localStorage.getItem('jwt')),那等于把命门交给 XSS。你只要让 cookie 自动带过去,JS 完全不碰它,就安全多了。真要上生产,记得再扫一遍 XSS 漏洞,比如用户评论区有没有过滤 HTML,插件有没有注入未转义的 JS——这些比存 token 的地方更致命。