我正在尝试使用 JavaScript 的现有后端代码:
fetch(someURL)
.then(res => res.json())
.then(data => console.log(data));
但是,我注意到响应标头说
content-type: application/x-javascript
所以它不是 JSON 并且.json()
调用会失败,返回的数据似乎是文本并包含:
for(;;);{"_some_var":1,"payload":{ ... // many properties and values here
发生了什么以及获取返回值的正确方法是什么?
似乎是一种防止 JSON 劫持的安全措施
<script src="https://example.com/resource.json"></script>
与此相关的情况下(ES5 / 2011 之前)的安全漏洞是,请求将与远程域的任何现有 cookie 一起发送,并且响应可能包含敏感数据。该循环使得响应在上述上下文中不可用。
普遍的共识是safe客户端在解析之前删除令牌
fetch(someUrl)
.then((res) => (res.ok ? res.text() : Promise.reject(res)))
.then((almostJson) =>
JSON.parse(almostJSON.replace(/^(while|for)\(.*?\);/, ""))
)
.then(console.log);
有一些不错的相关讨论这个帖子 https://stackoverflow.com/q/2669690/283366.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)