【问题标题】:XMLHttpRequest, FireFox Extension, and error code '1012' (Access Denied)XMLHttpRequest、FireFox 扩展和错误代码“1012”(拒绝访问)
【发布时间】:2009-10-02 03:20:24
【问题描述】:

我正在开发一个使用 XMLHttpRequest 从远程服务器获取数据的 FireFox 扩展。

javascript代码如下:

function _PostBackObject(data) {
    var postBack = new XMLHttpRequest();
    postBack.onreadystatechange =
        function(){
            if (postBack.readyState == 4) {
                if (postBack.status == 200) {
                    // Success
                    return;
                }

                _ErrorOccured(postBack.status);
            }
        };

    postBack.open("POST", postBackUrl, true, user, password);  //This is line #51
    postBack.send(data);
}

我在 FireFox 控制台中收到以下错误:

错误:未捕获的异常: [例外...“访问受限 URI 被拒绝”代码:“1012”nsresult: “0x805303f4(NS_ERROR_DOM_BAD_URI)” 地点: “铬://my_ext/content/context.js 线:51"]

postBackUrl 可以是任何东西(出于测试目的,我一直在使用本地计算机 [127.0.0.1] 和位于本地网络上的服务器 [so 192.168.*.*],两者都在端口 8088 上)因为它是用户输入。

看起来我被 XSS 安全措施绊倒了。我将如何解决这个问题?

一些额外的细节:

  • FireFox 3.5.3(仅限于此及更新版本是可以接受的)
  • 未签名的扩展名(我会自行签名,但据我所知,这很麻烦,而且对您没有任何好处)
  • 我可以完全控制远程服务器(它是自定义设置,不是 Apache 或 IIS,用 C# 为 .NET 3.5 编写)

【问题讨论】:

  • 那是标记的 //This is Line #51

标签: javascript firefox xmlhttprequest


【解决方案1】:

首先,如果您从 chrome 调用此代码,则您的代码不应进行任何跨站点检查。 Chrome 代码默认允许跨站 XHR。您是直接从 chrome 调用它,还是以某种方式将其注入内容? http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsXMLHttpRequest.cpp#1736

其次,XHR 代码中只有三个地方会返回特定的错误代码: http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsXMLHttpRequest.cpp#491 http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsXMLHttpRequest.cpp#1581 http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsXMLHttpRequest.cpp#2996

它们都与预检请求有关: http://www.w3.org/TR/access-control/#preflight-request

您的服务器是否得到其中之一,并且处理不当?

【讨论】:

  • 我省略了 Access-Control-Request-Method 标头。
猜你喜欢
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2015-01-31
  • 2015-01-09
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多