2009-09-23 1 views
0

Я работаю над расширением FireFox, которое использует XMLHttpRequest для захвата данных с удаленного сервера.XMLHttpRequest, расширение FireFox и код ошибки '1012' (Access Denied)

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:

Error: uncaught exception: [Exception... "Access to restricted URI denied" code: "1012" nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)" location: "chrome://my_ext/content/context.js Line: 51"]

PostBackUrl может быть что угодно (для целей тестирования я использовал местный machine [127.0.0.1] и сервер, расположенный в моей локальной сети [так 192.168. *. *], как на порту 8088), так и во время ввода пользователя.

Похоже, я спотыкаюсь о мерах безопасности XSS. Как мне это обойти?

Некоторые дополнительные детали:

  • FireFox 3.5.3 (это приемлемо, чтобы ограничить к этому и новой)
  • Unsigned расширение (я бы самостоятельно подписать его, но это довольно хлопот и выгоды вы ничего, насколько я могу сказать)
  • у меня полный контроль над удаленным сервером (его пользовательские настройки, а не Apache или IIS, написанный на C# для .NET 3,5)
+0

который является линией 51? – luiscubal

+2

Это будет обозначение // Это строка # 51 –

ответ

3

Во-первых, если вы звоните с хром, ваш код не должен ударять по кросс-сайтам. По умолчанию для Chrome-кода разрешено выполнять межсайтовый XHR. Вы называете это прямо из хром, или вы каким-то образом вводите это в контент? 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

ли ваш сервер получает один из них и неправильно его использует?

+0

Я опускаю заголовок 'Access-Control-Request-Method'. –