我想知道如何在火狐JavaScript中访问和修改跨域iframe的内容。我理解普通JavaScript的局限性,以及修改跨域iframe将是XSS漏洞,但我相信在WebExtension中有一些方法是我找不到的。我认为这是因为遗留扩展清单有允许权限部分中跨域内容的选项。
当查看旧版本的FireFox扩展的旧代码时,某些网站的跨域内容的选项如下所示。尽管对于新的FireFox WebExtension,这不是文档中列出的特性。
"cross-domain-content": ["https://www.example.com"]这是我的manifest.json文件。
{
"manifest_version": 2,
"name": "Test Extension",
"version": "1.0",
"content_scripts": [
{
"matches": ["*://*/*"],
"all_frames": true,
"js": [
"js/main.js"
]
}
],
"permissions": [
"*://*/*",
"<all_urls>",
]
}这是我的main.js文件。
// Code is being run within an iframe ("all_frames": true)
if (window != window.top) {
// Attempt to log the source of the parent iframe
// If cross domain, met throws - Error: Permission denied to access property "frameElement"
console.log(window.parent.frameElement.src);
}正如您在main.js文件中所看到的,当试图打印父文件的源时,会引发错误,如下所示。
错误:拒绝访问属性"frameElement“的权限
我想知道如何允许FireFox WebExtension访问和修改跨域iframe的内容。我不确定这是否是在清单中设置正确权限的问题,还是我必须使用WebExtension API或其他什么,我只是在上面找不到任何东西。
此外,如果有人可以参考或提供一些例子,以这种方式修改iframe的内容,这将是非常感谢的。
发布于 2017-03-23 17:32:26
不可能直接访问跨域内容。
直接访问跨域内容是不可能的,或者至少不应该是可能的。虽然可能有办法绕过这一限制(我还没有看完),但这将不是有意的,将被视为一个bug。
与其他类型的火狐扩展不同,WebExtensions被授予访问内容的权限,最多是在一个域的基础上。这与您在"<all_urls>" permissions中指定的manifest.json permissions或"*://*/*"无关。指定多个域权限不会打开对跨域内容的访问权限。开放对跨域内容的访问将是一个更复杂的问题,这可能会有它自己的一组与安全相关的错误。因此,在permissions中指定多个域只允许将脚本/CSS注入多个匹配的URL,而不需要对跨域内容进行特殊访问。因此,不应该有一种方法可以直接访问跨域iframe中的内容。
必须使用在该帧中注入的脚本访问跨域内容。
如果您想要访问跨域内容,则必须将脚本插入到iframe或顶层窗口中,您希望访问该脚本。如前所述,注入这样的脚本/CSS的能力是由permissions控制的事情之一。然后,您可以使用消息传递(从/到顶部帧/子帧中的内容脚本,或通过后台脚本中继)在跨域框架中注入的脚本之间进行通信。
考虑到您已经在向<all_urls>和all_frames中注入脚本,您只需要实现上面提到的在它们之间进行通信的方法之一。然后,您需要从其他脚本请求所需的信息,或者将信息传递给其他脚本进行处理。
https://stackoverflow.com/questions/42968473
复制相似问题