API返回实际数据前出现垃圾字符,JSON前追加)]}'是什么原因?
产生原因
- 这是Web领域普遍使用的JSON劫持防护手段,并非你方应用独有。
- 攻击场景下,第三方恶意站点可通过
<script>标签引入你方的JSON接口返回内容,利用JS语法特性窃取接口返回的敏感数据。在JSON内容前追加)]}'这类无法被正常解析的前缀后,恶意站点引入该内容时会直接抛出JS语法错误,无法获取到有效数据,进而实现防护效果。 - 不少前端框架(如Angular)默认自带该类前缀的自动剥离逻辑,常规开发场景下开发者很少会感知到该机制存在。
处理思路
- 前端处理:接收响应后先校验内容前缀,匹配
)]}'则截取掉前缀后再执行JSON解析即可,参考实现:
function parseSecurityJson(resText) { const unsafePrefix = ")]}'"; if (resText.startsWith(unsafePrefix)) { resText = resText.slice(unsafePrefix.length); } return JSON.parse(resText); }
- 后端处理:如不需要该安全机制,可查找当前使用的Web框架的JSON响应安全配置项,关闭前缀追加逻辑即可,注意关闭后会存在JSON劫持安全风险,非必要不建议操作。
- 调试工具适配:使用Postman、Apifox等接口调试工具时,可配置响应预处理脚本自动剥离前缀,无需每次手动修改内容后再格式化。
内容的提问来源于stack exchange,提问作者zs2020
相关产品推荐
相关产品推荐

