호스트 권한에 대한 사용자 제어: 전환 가이드

요약

변경되는 사항

Chrome 70부터 사용자는 확장 프로그램 호스트가 맞춤 사이트 목록에 액세스하는 것을 제한하거나, 클릭하여 현재 페이지에 액세스할 수 있도록 확장 프로그램을 구성할 수 있습니다.

어떤 API가 영향을 받나요?

이 변경사항은 확장 프로그램의 매니페스트에 지정된 호스트 권한의 영향을 받는 모든 API와 콘텐츠 스크립트에 영향을 미칩니다. 호스트 권한을 요구하는 API에는 webRequest, cookies, tabs.executeScript(), tabs.insertCSS(), 그리고 XMLHTTPRequest 또는 fetch() API 등을 통해 교차 출처 요청을 실행하는 API가 있습니다.

액세스 제한

사용자가 액세스를 어떻게 제한할 수 있나요?

사용자는 클릭 시, 특정 사이트 집합 또는 요청된 모든 사이트에서 확장 프로그램이 실행되도록 선택할 수 있습니다. 이러한 옵션은 chrome://extensions 페이지 및 확장 프로그램 컨텍스트 메뉴에서 사용자에게 표시됩니다.

클릭 시, 특정 사이트 또는 모든 사이트에서 확장 프로그램을 실행하는 옵션을 포함한 런타임 호스트 권한을 제어하는 컨텍스트 메뉴의 스크린샷

사용자가 '클릭 시' 확장 프로그램을 실행하도록 선택하면 어떻게 되나요?

확장 프로그램은 기본적으로 activeTab 권한을 사용한 것처럼 동작합니다. 확장 프로그램에서 호스트를 요청한 경우 (chrome://settings와 같이 제한된 사이트가 아닌 경우) 확장 프로그램은 사용자가 확장 프로그램을 클릭한 모든 호스트에 임시 액세스 권한을 부여합니다. 클릭 시 실행되도록 설정하면 Chrome은 특정 사이트에서 액세스를 요청 중임을 나타내기 위해 확장 프로그램에 원과 그림자 (아래 참고)로 배지를 표시합니다.

툴바의 확장 프로그램 아이콘에 추가된 Chrome 배지의 스크린샷

사용자가 특정 사이트에서 내 확장 프로그램을 실행하도록 선택하면 어떻게 되나요?

확장 프로그램은 사용자가 선택한 모든 사이트에서 자동으로 실행될 수 있으며 추가 사용자 작업 없이 사이트에 액세스할 수 있습니다. 확장 프로그램이 요청했지만 사용자가 권한을 부여하지 않은 다른 사이트에서는 사용자가 확장 프로그램이 클릭 시 실행되도록 설정한 경우와 동일합니다.

사용자가 모든 사이트에서 내 확장 프로그램을 실행하도록 선택하면 어떻게 되나요?

확장 프로그램은 매니페스트에서 요청된 모든 사이트에 자동으로 액세스할 수 있습니다.

API 동작

웹 요청 API

확장 프로그램은 여전히 액세스 권한이 있는 사이트의 모든 요청을 가로채고 수정하고 차단할 수 있습니다. 확장 프로그램에서 액세스할 수 없는 사이트의 경우 Chrome은 확장 프로그램에서 페이지 액세스를 요청함을 나타내기 위해 확장 프로그램에 배지를 표시합니다. 그러면 사용자가 확장 프로그램에 액세스 권한을 부여할 수 있습니다. 그러면 Chrome에서 확장 프로그램이 네트워크 요청을 가로챌 수 있도록 사용자에게 페이지를 새로고침하라는 메시지를 표시합니다.

콘텐츠 스크립트, 탭.executeScript(), 탭.insertCSS()

확장 프로그램은 액세스 권한이 있는 모든 사이트에 대해 스크립트와 스타일시트를 자동으로 삽입할 수 있습니다. 확장 프로그램에 액세스 권한이 없는 사이트의 경우 Chrome은 확장 프로그램에서 페이지 액세스를 요청함을 나타내기 위해 확장 프로그램에 배지를 표시합니다. 그런 다음 사용자는 확장 프로그램에 대한 액세스 권한을 부여할 수 있습니다. 콘텐츠 스크립트가 document_idle에 삽입되도록 설정된 경우 스크립트가 즉시 삽입됩니다. 그렇지 않으면 확장 프로그램이 페이지 로드 (document_start 또는 document_end에서) 초기에 스크립트를 삽입할 수 있도록 Chrome에서 사용자에게 페이지를 새로고침하라는 메시지를 표시합니다. tabs.executeScript()tabs.insertCSS() 메서드의 콜백은 사용자가 사이트 액세스 권한을 부여한 경우에만 호출됩니다.

쿠키 및 백그라운드 페이지 XHR

확장 프로그램은 여전히 모든 쿠키를 읽고 수정할 수 있으며 액세스 권한이 있는 사이트에 대해 교차 출처 XHR을 실행할 수 있습니다. 다른 출처의 쿠키나 XHRing에 액세스하는 확장 프로그램 페이지와 연결된 탭이 없으므로 Chrome은 확장 프로그램에서 사이트 액세스를 요청한다고 사용자에게 알리기 위해 확장 프로그램의 배지를 표시하지 않습니다. 다른 사이트의 쿠키에 액세스하거나 교차 출처 XHR을 만들려고 하면 확장 프로그램의 매니페스트에 호스트 권한이 포함되어 있지 않은 것처럼 오류와 함께 실패합니다. 이러한 경우에는 사용자가 다양한 사이트에 런타임 액세스 권한을 부여할 수 있도록 선택적 권한을 사용하는 것이 좋습니다.

아래 예는 쿠키 API에서 작동하는 방식을 보여줍니다.

실행 전:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

실행 후:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

마이그레이션

부정적인 영향을 받지 않기 위한 권장사항은 무엇인가요?

확장 프로그램은 선택적 권한, activeTab, declarativeContent API를 사용하여 권장사항을 따를 수 있습니다. 런타임 시 선택적 권한이 부여되며 확장 프로그램이 사이트에 대한 특정 액세스 권한을 요청할 수 있습니다. activeTab 권한은 영향을 받지 않으며 이 권한을 사용하는 확장 프로그램은 계속 정상적으로 작동합니다. declarativeContent API는 모든 페이지에 스크립트를 삽입해야 하는 많은 요구사항을 대체합니다.

현재 사용자의 설정은 어떻게 되나요?

이 변경사항은 확장 프로그램에 부여된 현재 권한에는 즉시 영향을 미치지 않습니다. 즉, 사용자가 액세스가 허용된 사이트를 제한하는 조치를 취하지 않는 한 이전처럼 계속 작동합니다. 향후 출시에서는 Chrome에서 사용자에게 설정을 조정할 수 있는 더 많은 컨트롤을 제공할 예정입니다.

내 확장 프로그램에 사이트에서 실행할 수 있는 권한이 있는지 확인하려면 어떻게 해야 하나요?

permissions.contains() API를 사용하면 확장 프로그램에 특정 출처에 대한 액세스 권한이 부여되었는지 확인할 수 있습니다.