在理解这两个漏洞时,我很困惑。JSONP 相关漏洞与 JSON 劫持有何不同?
JSON劫持与JSONP注入不同吗?
信息安全
json
2021-08-16 17:40:06
1个回答
JSON劫持与JSONP注入不同吗?
是的,它们是不同的攻击。虽然 JSON 劫持是过去的威胁,现在已在所有主要浏览器中消除,但 JSONP 注入仍然是 Web 应用程序的安全威胁。这两种攻击的共同点是它们的目标是从不受信任的来源读取 JSON 响应。
JSONP 注入
使用 JSONP(带填充的 JSON),应用程序故意在函数回调中提供 JSON 响应(或有时作为分配),通常是为了克服跨域边界。
例如,该站点https://example.com/mySecrets?callback=saveSecrets
可能会返回当前登录用户的一些“秘密”,响应如下所示:
saveSecrets({"userSecrets": [123, 456, 789]})
在这种情况下,攻击者可以定义自己的回调函数saveSecrets
(
<script>
function saveSecrets(secrets) {
alert(secrets);
}
</script>
<script src="https://example.com/mySecrets?callback=saveSecrets"></script>
(还有很多其他的 JSONP 攻击场景。你可以在这里找到更多的详细解释。)
JSON劫持
JSON 劫持遵循与泄露 JSON 响应相同的想法。但是在这种情况下,应用程序并没有提供方便的回调函数。相反,攻击依赖于修改原生 JS 对象。幸运的是,这在当前的浏览器中已经不可能了。
教科书示例是 Array 中的 JSON,例如:
[{"userSecrets": [123, 456, 789]}]
多年前,当浏览器允许脚本重新定义原生 JS 对象时,提取秘密的方法是定义自己的Array
构造函数或使用 eg 劫持 Object 原型,Object.__defineSetter__
然后将 URL 作为外部脚本引用,类似于上面的 JSONP 示例.
(您可以在此博客文章或我的回复中阅读有关 JSON 劫持的更多信息。)