如何在我自己的浏览器上停用跨站点脚本防御?

时间:2009-09-19 01:59:31

标签: javascript firefox xss

我想从另一个域页面中的iframe内的域加载页面,然后使用JS访问其内容。当然,这将是XSS所以我得到“权限被拒绝获取属性HTMLDocument ...”错误。问题是,我想在我自己的浏览器上执行此操作,而不是在公共访问站点(即我不需要它来保护我自己),所以我很乐意将这种安全性关闭一段时间。我正在使用firefox 3.5,想知道是否可以使用这个或其他浏览器来完成。

3 个答案:

答案 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。

  1. 修改about:config并将signed.applets.codebase_principal_support设置为true(这将允许未签名的脚本要求提升权限)

  2. 在父脚本中请求提升权限:

  3.   

    &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给予脚本权限: firefox confirm box

    允许它,您应该收到包含文字的提醒:[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无意中将此功能暴露给内容脚本,这当然是一个重大的安全错误。可以开发一个扩展,它可以做同样的事情,或者只在某些情况下暴露自定义函数。