1

배경 :확장 프로그램에서 북마크릿을 안전하게 실행합니까?

북마크를 검색하고 사용자의 URL을 열어 본 확장 프로그램을 작성했습니다.

내가 확장에 자바 스크립트 북마크 지원을 추가했고 지금은이 코드 비슷한하여 스크립트를 호출한다 :

var bookmark_address; // the address containing javascript:blah(); 
chrome.tabs.update({'url': bookmark_address}); 

: 이전

var bookmark_address; // the address containing javascript:blah(); 
var js = bookmark_address.substr(11); 
chrome.tabs.executeScript({'code': js}); 

것은이 코드를 사용하고 있었다 처음에는 더 좋아 보이지만 실제로는 큰 차이가 없습니다. 둘 다 권한 ["tabs", "<all_urls>"]이 필요합니다. 사용자가 북마크 지원을 사용하도록 선택하면 (예 : optional permissions) 권한을 요청하고 있습니다.

문제 : 난 그냥 보안 문제를 생각

. 북마크는 사용자가 추가하여 인 경우 일반적으로이지만 내 확장 프로그램이 스크립트를 "호출"하기 때문에 내 확장 프로그램의 컨텍스트에서 실행됩니다. 스크립트는 내 확장 프로그램의 로컬 저장소 및 변수를 엉망으로 만들 수 있습니다. 또한 실행 된 스크립트에 Cross-Origin XMLHttpRequest을 수행 할 수있는 권한이있을 수 있습니다.(Docs)

정확하게 생각합니까? 정말로 보안 문제가 있습니까? 내 확장 프로그램에서 스크립트 실행을 "샌드 박싱"하거나 스크립트에 대한 사용 권한을 사용 불가능하게 설정할 수 있습니까?

확장 프로그램 사용자에게는 매우 좋지 않을 수 있으므로 문제를 심각하게 고려하십시오.

답변

1

은 (추가 javascript:와 물론) 다음과 같은 북마크와 출처 간 XHR을 테스트 :

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 
     console.log(xhr.responseText); 
    } 
}; 
xhr.open("POST", "http://jsfiddle.net/echo/json/", true); 
xhr.send("json=" + encodeURIComponent(JSON.stringify({"foo": "bar"}))); 

결과 :

  • 북마크를 클릭하지 하지 허가 출처 간 XHR.
  • chrome.tabs.update을 사용하면 이 아니라이 교차 기원 XHR을 허용합니다.
  • chrome.tabs.executeScript은 교차 기원 XHR을 허용합니다.

결론 : chrome.tabs.executeScript이 북마크를 실행하기위한 적합하지 동안

북마크를 실행 chrome.tabs.update 사용은 기본적으로 일반적으로 북마크를 클릭 한 안전합니다.

0

가장 안전한 솔루션은 스크립트 태그 안에있는 페이지에 스크립트를 추가하는 것입니다. 이 기능은 일반적인 북마크릿의 작동 방식과 가장 유사하게 작동하며 코드에 추가 권한을 부여하지는 않습니다. 스크립트가 즉시 제거되면 더 나을 수도 있습니다.