我想从另一个域页面中的iframe内的域加载页面,然后使用JS访问其内容。当然,这将是XSS所以我得到“权限被拒绝获取属性HTMLDocument ...”错误。问题是,我想在我自己的浏览器上执行此操作,而不是在公共访问站点(即我不需要它来保护我自己),所以我很乐意将这种安全性关闭一段时间。我正在使用firefox 3.5,想知道是否可以使用这个或其他浏览器来完成。
答案 0 :(得分:3)
2016年11月更新 在Chrome中禁用同源策略的一种更简单的方法是使用以下标志启动它:
google-chrome --disable-web-security --user-data-dir
<强>更新强>
请注意您请求提升权限的范围。方法一按预期工作,catch是在您将使用它的同一范围内请求提升权限(在同一函数中,在全局范围内......),它不适用于任何其他范围。
我使用工作代码更新了示例。
它在文档中:
权限仅在请求函数的范围内授予。此范围包括请求函数调用的任何函数。当脚本离开请求功能时,权限不再适用。
http://www.mozilla.org/projects/security/components/signed-scripts.html
我正在尝试为我的公司内部网站点做同样的事情(我们根据服务器位置有47种不同的domanis,并且很容易为那些仅在用户Firefox中的站点禁用“相同的源策略”)。
根据mozilla网站的文档,这些方法应该有效......我从谷歌搜索中发现,这对于Firefox 2来说是真实的,我在FF3&amp; FF4并没有起作用。您应该尝试这个,maibe il将为您工作,我仍然在寻找解决方案
方法1。
修改about:config
并将signed.applets.codebase_principal_support
设置为true
(这将允许未签名的脚本要求提升权限)
在父脚本中请求提升权限:
&LT; HTML&GT;&LT; HEAD&GT;&LT;脚本
类型= “文本/ JavaScript的” &GT;
功能xss()
{
试试{
netscape.security.PrivilegeManager.enablePrivilege( “UniversalBrowserRead”);
} catch(e)
{
警报(E); // console.log(e)如果你有萤火虫
}
警报(的document.getElementById( '框架')contentWindow.document。); // console.log()
}
&LT; /脚本&GT;&LT; /头&GT;
&lt; body onLoad =“xss();”&gt; &lt; iframe id =“frame”
SRC = “http://example_1.com” &GT;&LT; / iframe中&GT;
&LT; /体&GT;&LT; / HTML&GT;
3。现在,当你加载页面时,FF将要求你的permision给予脚本权限:
允许它,您应该收到包含文字的提醒:[object HTMLDocument]
在进行任何修改之前,如果我尝试访问....contentWindow.document
,我会收到此错误:
Error: A script from "http://example.com" was denied UniversalBrowserRead privileges.
我得到了这个:
Permission denied for <http://example.com> to get property Window.document from <http://example_1.com>.
如果您喜欢在命令行中工作,可以跳过步骤1和3并编辑presf.js文件(在Linux上:/home/$yourUser/.mozilla/firefox/$yourProfile/prefs.js)并添加4行
user_pref("signed.applets.codebase_principal_support", true);
user_pref("capability.principal.codebase.p0.granted", "UniversalBrowserRead");
user_pref("capability.principal.codebase.p0.id", "http://example.com");
user_pref("capability.principal.codebase.p0.subjectName", "");
方法2。
尝试添加策略以允许网站绕过此编辑prefs.js的SOP并添加以下行:
user_pref("capability.policy.policynames", "example");
user_pref("capability.policy.example.HTMLDocument", "allAccess");
user_pref("capability.policy.example.sites", "http://example.com http://example_1.com");
不幸的是,即使方法2没有完成这项工作。
我仍在寻找解决方案,如果我发现任何新内容,我会更新答案。
答案 1 :(得分:0)
我知道这听起来很聪明,但我真的不是那个意思。这是一个诚实的建议,如果它适合你,因为我怀疑任何浏览器都会让你编辑设置,使其易受攻击。
使用旧版浏览器。如有必要,在虚拟机上安装较旧的操作系统,以使浏览器足够老,不会有这种防御。
答案 2 :(得分:0)
Greasemonkey's version of XMLHttpRequest允许请求跨越同源策略边界。这可能会成功,因为它只适合您自己的本地开发。
此外,早期版本的Greasemonkey无意中将此功能暴露给内容脚本,这当然是一个重大的安全错误。可以开发一个扩展,它可以做同样的事情,或者只在某些情况下暴露自定义函数。