JSONP真的不安全吗?为什么现在都不推荐用了? UI子轩 提问于 2026-03-11 20:49:18 阅读 53 安全 最近在维护一个老项目,发现它还在用 JSONP 跨域请求用户数据。我看网上说 JSONP 有安全风险,但不太明白具体危险在哪——毕竟我们只信任自家的 API 啊?而且试过改成 fetch + CORS,但后端没配响应头,直接被浏览器拦了。 现在纠结要不要硬着头皮重构,还是继续用 callback=? 这种方式。有没有人能说说 JSONP 到底会引发什么实际的安全问题?比如 XSS 或数据泄露之类的? 我来解答 赞 9 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 建英 Dev Lv1 你这个问题 JSONP 确实不安全,容易导致 XSS 攻击,因为它是通过动态插入 script 标签来加载数据的。现在都推荐用 CORS 来解决跨域问题,虽然麻烦点但安全得多。 回复 点赞 2026-03-23 14:06 Newb.梓艺 Lv1 JSONP确实有安全问题,而且不是那种"理论上有风险"的级别,是实打实的坑。 核心问题在于:JSONP本质是让你去请求一个script标签,返回的直接就是一段JavaScript代码,会被浏览器执行。这意味着你完全信任服务端返回的内容,但如果有人劫持了你的DNS或者API被攻击,返回一段恶意JS,那用户的cookie、token啥的直接就被人拿走了。你没法验证返回的数据是不是真的是JSON,也没法阻止服务端返回恶意代码。 还有一个CSRF的问题:script标签发请求会自动带上cookie,绕不过浏览器的同源策略保护。你说只信自家API,但万一API被XSS或者被其他方式插入了恶意代码呢?防不胜防。 至于你说后端没配CORS被拦了,这反而是简单的事。只需要后端加几个响应头: // PHP示例,其他语言类似 header("Access-Control-Allow-Origin: https://your-frontend.com"); header("Access-Control-Allow-Credentials: true"); header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 如果后端不肯改,那就搞个服务端代理,让你的前端请求同域的代理接口,代理去调用那个跨域的API。 我的建议:能重构就重构,别纠结。JSONP是历史遗留方案,现在CORS才是标准。短期看配响应头或者加代理都能解决,长期看趁早淘汰JSONP。你只是被后端的懒政卡住了,又不是技术上的死胡同。 回复 点赞 1 2026-03-11 21:02 加载更多 相关推荐 1 回答 41 浏览 JSONP还能用吗?为什么现在都说是安全风险? 最近在重构一个老项目,发现它还在用 JSONP 跨域请求第三方数据。我查了下资料,说 JSONP 有 XSS 风险,但又没太明白具体怎么出问题的。我自己试着重构成 fetch + CORS,但对方接口... 程序猿建杰 安全 2026-02-25 02:48:22 2 回答 88 浏览 JSONP还有人用吗?它到底有什么安全风险? 最近在维护一个老项目,发现接口还在用 JSONP 跨域,但听说这玩意儿很不安全。我试着改成 fetch + CORS,但后端没配 Access-Control-Allow-Origin,直接被拦了。 ... Mr-小青 安全 2026-03-11 23:11:18 2 回答 48 浏览 JSONP跨域请求在Vue中怎么用?一直报错 我在Vue项目里想用JSONP请求第三方接口,但总是失败,浏览器控制台提示“Uncaught ReferenceError: callback is not defined”。我试过动态创建scrip... 迷人的保艳 前端 2026-03-05 23:37:22 2 回答 68 浏览 JSONP跨域调用时如何防范第三方注入恶意脚本导致XSS? 我在用JSONP做跨域请求时突然意识到,如果第三方接口返回恶意代码,岂不是能直接在页面执行?比如我这样调用: const script = document.createElement('script... Top丶茂庭 安全 2026-01-31 23:36:30 2 回答 62 浏览 前端加盐哈希密码真的安全吗? 我最近在做一个登录页面,想在前端对用户密码加盐再哈希,但不确定这样是不是真的安全。听说盐值不能硬编码,可如果每次随机生成,后端怎么验证呢? 我试了用 crypto-js 库,代码大概这样: const... Mr-银银 安全 2026-02-26 16:28:21 1 回答 34 浏览 前端用 MD5 加密密码真的安全吗? 我在做一个登录页面,想在前端用 MD5 对用户密码做哈希后再传给后端。但听说 MD5 已经不安全了,可我看很多老项目还在用,有点懵。 我试过用 crypto-js/md5 这个库,代码大概是这样: i... a'ゞ旗施 安全 2026-03-27 11:01:23 1 回答 47 浏览 安全需求阶段前端要做什么具体工作? 我们团队刚开始推行安全开发生命周期(SDL),现在卡在「安全需求」阶段。作为前端,除了常规的功能需求,到底要提哪些和安全相关的需求啊?比如是不是得要求后端接口必须带 CSRF token?还是说要明确... 司空冬冬 安全 2026-03-27 08:32:23 1 回答 24 浏览 安全头设置后为什么CSS样式失效了? 我在 Nginx 里加了 Content-Security-Policy 安全头,结果页面的内联样式全不生效了,控制台报错说被阻止了。我试过把 style-src 改成 'unsafe-inline'... 西门佳妮 前端 2026-03-24 11:56:19 1 回答 54 浏览 前端能直接加密用户密码吗?怎么保证安全? 我在做登录页面,想在前端把用户输入的密码加密后再传给后端,但不确定这样做是不是真的安全。试过用 crypto-js 做 SHA256 加密,但听说这样其实没用,因为密钥或算法暴露在前端,攻击者照样能还... UX秀玲 安全 2026-03-21 13:28:25 2 回答 46 浏览 PBKDF2在前端加密密码真的安全吗? 我在做用户注册功能,看到后端用PBKDF2加盐哈希存密码。但我想在前端也先加密一次再传给后端,这样更安全吧? 可我试了用Web Crypto API的crypto.subtle.deriveKey,结... W″嘉赫 安全 2026-03-18 23:20:23
核心问题在于:JSONP本质是让你去请求一个script标签,返回的直接就是一段JavaScript代码,会被浏览器执行。这意味着你完全信任服务端返回的内容,但如果有人劫持了你的DNS或者API被攻击,返回一段恶意JS,那用户的cookie、token啥的直接就被人拿走了。你没法验证返回的数据是不是真的是JSON,也没法阻止服务端返回恶意代码。
还有一个CSRF的问题:script标签发请求会自动带上cookie,绕不过浏览器的同源策略保护。你说只信自家API,但万一API被XSS或者被其他方式插入了恶意代码呢?防不胜防。
至于你说后端没配CORS被拦了,这反而是简单的事。只需要后端加几个响应头:
如果后端不肯改,那就搞个服务端代理,让你的前端请求同域的代理接口,代理去调用那个跨域的API。
我的建议:能重构就重构,别纠结。JSONP是历史遗留方案,现在CORS才是标准。短期看配响应头或者加代理都能解决,长期看趁早淘汰JSONP。你只是被后端的懒政卡住了,又不是技术上的死胡同。