2010-04-08 19 views
1

Je suis en train d'écrire un module complémentaire FireFox qui affiche les pages Web de mon serveur en tant que panneaux de contrôle et d'information. Ces panneaux ont été écrits et fonctionnent dans des URL normales, mais quand j'essaye d'y accéder par le biais d'un protocole personnalisé (donc c'est sur :, juste myplugin: settings) chaque XMLHttpRequest retourne vide comme si je faisais du XSS. Je sais que les données passent - les requêtes sont valides, acceptées par le serveur, et tcpdump dit qu'elles arrivent sur ma machine. De toute évidence, est donc ici, il a quelque chose à voir avec la mise en œuvre du protocole sur mesure la partie pertinente que:Texte de réponse vide dans XMLHttpRequest lors de l'exécution dans un protocole personnalisé dans FireFox?

newURI: function(spec, charset, baseURI) 
    { 
     var uri = Components.classes[@"mozilla.org/network/simple-uri;1"].createInstance(nsIURI); 

     if (baseURI) { 
      spec = "myplugin:" + spec; 
     } 

     uri.spec = spec; 

     return(uri); 
    }, 

    newChannel: function(aURI) 
    { 
     var incomingURI = aURI.spec; 
     var purpose = incomingURI.substring(incomingURI.indexOf(":") + 1, incomingURI.length); 
     var my_spec; 
     var my_uri; 
     var proto; 

var api_scheme = "http"; 
var api_host = "myapi.myserver.com"; 
var api_token = "temp"; 

     purpose = encodeURI(purpose); 

     if(purpose.match(/^\//)) // If it begins with a "/" (relative URL) 
      if(purpose.match(/\?/)) // It already contains a query string 
       my_spec = api_scheme + "://" + api_host + purpose + "&api_token=" + api_token; 
      else 
       my_spec = api_scheme + "://" + api_host + purpose + "?api_token=" + api_token; 
     else 
      my_spec = api_scheme + "://" + api_host + "/frontend/" + purpose + "?api_token=" + api_token; 

     my_uri = Components.classes[@mozilla.org/network/simple-uri;1].createInstance(nsIURI); 
     my_uri.spec = my_spec; 
     proto = Components.classes["@mozilla.org/network/protocol;1?name="+api_scheme].getService(nsIProtocolHandler); 

     return (proto.newChannel(my_uri)); 
    } 
}; 

Répondre

1

Aux yeux de la spécification que vous faites XSS.

Bien que les implémentations diffèrent légèrement d'une plate-forme à l'autre, la règle générale est le même protocole, même domaine, même port.