2010-04-08 3 views
1

내 서버에서 컨트롤 및 정보 패널로 웹 페이지를 표시하는 FireFox 애드온을 작성 중입니다. 이러한 패널은 일반 URL로 작성되고 작동하지만 사용자 정의 프로토콜을 통해 액세스하려고하면 (예 : myplugin : 설정과 비슷 함) 모든 XMLHttpRequest는 XSS 작업을 수행하는 것처럼 비어있게됩니다. 나는 데이터가 통과하는 것을 알고있다 - 요청은 유효하고, 서버에 의해 받아 들여지고, tcpdump는 그들이 내 컴퓨터로 보내고 있다고 말한다. 분명히 사용자 정의 프로토콜 구현과 관련이 있기 때문에 여기에는 관련 부분이 있습니다.FireFox에서 사용자 정의 프로토콜을 실행할 때 XMLHttpRequest의 응답 텍스트가 비어 있습니까?

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)); 
    } 
}; 

답변

1

사양의 관점에서 xss를 수행하고 있습니다.

플랫폼에 따라 구현이 약간 다르긴하지만 일반적으로 어림짐작은 동일한 프로토콜, 동일한 도메인, 동일한 포트입니다.