JSONP真的不安全吗?为什么现在都不推荐用了? UI子轩 提问于 2026-03-11 20:49:18 阅读 18 安全 最近在维护一个老项目,发现它还在用 JSONP 跨域请求用户数据。我看网上说 JSONP 有安全风险,但不太明白具体危险在哪——毕竟我们只信任自家的 API 啊?而且试过改成 fetch + CORS,但后端没配响应头,直接被浏览器拦了。 现在纠结要不要硬着头皮重构,还是继续用 callback=? 这种方式。有没有人能说说 JSONP 到底会引发什么实际的安全问题?比如 XSS 或数据泄露之类的? 我来解答 赞 2 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 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 回答 30 浏览 JSONP还能用吗?为什么现在都说是安全风险? 最近在重构一个老项目,发现它还在用 JSONP 跨域请求第三方数据。我查了下资料,说 JSONP 有 XSS 风险,但又没太明白具体怎么出问题的。我自己试着重构成 fetch + CORS,但对方接口... 程序猿建杰 安全 2026-02-25 02:48:22 1 回答 15 浏览 JSONP还有人用吗?它到底有什么安全风险? 最近在维护一个老项目,发现接口还在用 JSONP 跨域,但听说这玩意儿很不安全。我试着改成 fetch + CORS,但后端没配 Access-Control-Allow-Origin,直接被拦了。 ... Mr-小青 安全 2026-03-11 23:11:18 1 回答 30 浏览 JSONP跨域请求在Vue中怎么用?一直报错 我在Vue项目里想用JSONP请求第三方接口,但总是失败,浏览器控制台提示“Uncaught ReferenceError: callback is not defined”。我试过动态创建scrip... 迷人的保艳 前端 2026-03-05 23:37:22 2 回答 46 浏览 JSONP跨域调用时如何防范第三方注入恶意脚本导致XSS? 我在用JSONP做跨域请求时突然意识到,如果第三方接口返回恶意代码,岂不是能直接在页面执行?比如我这样调用: const script = document.createElement('script... Top丶茂庭 安全 2026-01-31 23:36:30 2 回答 31 浏览 前端加盐哈希密码真的安全吗? 我最近在做一个登录页面,想在前端对用户密码加盐再哈希,但不确定这样是不是真的安全。听说盐值不能硬编码,可如果每次随机生成,后端怎么验证呢? 我试了用 crypto-js 库,代码大概这样: const... Mr-银银 安全 2026-02-26 16:28:21 2 回答 18 浏览 安全需求阶段前端要做什么? 我们团队刚开始引入安全开发生命周期(SDL),现在卡在“安全需求”这一步。作为前端,我不太清楚自己该提哪些具体的安全需求,比如是不是所有用户输入都要过滤?还是说只要后端处理就行? 我试过在表单提交前用... 伊可 安全 2026-02-28 22:05:21 2 回答 22 浏览 安全头配置后为什么检测工具还是报缺失? 我按照文档在 Nginx 里加了 CSP、X-Frame-Options 这些安全头,本地测试 headers 看起来都返回了,但用 SecurityHeaders.com 检测还是说 Missing... 极客爱香 安全 2026-02-26 13:27:20 2 回答 43 浏览 MVP模式中Presenter怎么安全更新视图状态? 我在用MVP写登录功能时遇到问题,Presenter怎么安全更新视图状态呢? 现在尝试把登录逻辑放在Presenter里处理,但直接调用view.showLoading()时发现: class Log... a'ゞ光耀 框架 2026-02-11 08:43:31 2 回答 567 浏览 CORS设置中用*通配符有什么安全风险?为什么改用具体域名反而报错? 我在后端设置了CORS的Access-Control-Allow-Origin为"*",结果被安全审计指出存在漏洞。改成允许特定域名后,浏览器却报"Response to preflight requ... 玉佩~ 安全 2026-02-09 22:11:46 1 回答 17 浏览 用 transform 做动画真的能提升性能吗?为什么我的页面还是卡? 我听说用 transform 做动画不会触发重排,应该更流畅,但我在做一个滑动菜单时还是明显卡顿,是不是哪里写错了? 我试过只用 transform: translateX 来移动元素,也加了 wil... 长孙秀英 优化 2026-03-14 02:40:20
核心问题在于:JSONP本质是让你去请求一个script标签,返回的直接就是一段JavaScript代码,会被浏览器执行。这意味着你完全信任服务端返回的内容,但如果有人劫持了你的DNS或者API被攻击,返回一段恶意JS,那用户的cookie、token啥的直接就被人拿走了。你没法验证返回的数据是不是真的是JSON,也没法阻止服务端返回恶意代码。
还有一个CSRF的问题:script标签发请求会自动带上cookie,绕不过浏览器的同源策略保护。你说只信自家API,但万一API被XSS或者被其他方式插入了恶意代码呢?防不胜防。
至于你说后端没配CORS被拦了,这反而是简单的事。只需要后端加几个响应头:
如果后端不肯改,那就搞个服务端代理,让你的前端请求同域的代理接口,代理去调用那个跨域的API。
我的建议:能重构就重构,别纠结。JSONP是历史遗留方案,现在CORS才是标准。短期看配响应头或者加代理都能解决,长期看趁早淘汰JSONP。你只是被后端的懒政卡住了,又不是技术上的死胡同。