웹에서 액세스할 수 있는 리소스는 웹페이지 또는 다른 확장 프로그램에서 액세스할 수 있는 확장 프로그램 내 파일입니다. 확장 프로그램은 일반적으로 이 기능을 사용하여 웹 페이지에 로드되지만 확장 프로그램의 번들에 포함된 모든 애셋은 웹에 액세스할 수 있습니다.
기본적으로 웹에서 액세스할 수 있는 리소스는 없습니다. 악의적인 웹사이트가 사용자가 설치한 확장 프로그램을 디지털 지문으로 식별하거나 설치된 확장 프로그램의 취약점(예: XSS 버그)을 악용할 수 있기 때문입니다. 확장 프로그램의 출처에서 로드된 페이지 또는 스크립트만 해당 확장 프로그램의 리소스에 액세스할 수 있습니다.
매니페스트 선언
web_accessible_resources
매니페스트 속성을 사용하여 노출되는 리소스와
무엇인지 알게 되었습니다. 이 속성은 리소스 액세스 규칙을 선언하는 객체의 배열입니다. 각 객체는 확장 프로그램 리소스 배열을 이러한 리소스에 액세스할 수 있는 URL 또는 확장 프로그램 ID 배열에 매핑합니다.
{
...
"web_accessible_resources": [
{
"resources": [ "test1.png", "test2.png" ],
"matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
}, {
"resources": [ "test3.png", "test4.png" ],
"matches": [ "https://web-accessible-resources-2.glitch.me/*" ],
"use_dynamic_url": true
}
],
...
}
배열의 각 객체에는 다음 요소가 포함됩니다.
"resources"
- 확장 프로그램의 루트 디렉터리에서 지정된 리소스의 상대 경로를 각각 포함하는 문자열 배열입니다. 리소스에는 와일드 카드 일치를 위한 별표(
*
)가 포함될 수 있습니다. 예를 들어"/images/*"
는 확장 프로그램의images/
디렉터리에 있는 모든 항목을 재귀적으로 노출하고"*.png"
는 모든 PNG 파일을 노출합니다. "matches"
- 이 리소스 세트에 액세스할 수 있는 사이트를 지정하는 일치 패턴이 각각 포함된 문자열 배열입니다. 출처만 URL을 일치시키는 데 사용됩니다. 출처에는 하위 도메인 일치가 포함됩니다. Chrome에서 '잘못된 일치 패턴'을 표시합니다. 오류가 발생합니다.
"extension_ids"
- 리소스에 액세스할 수 있는 확장 프로그램의 ID가 각각 포함된 문자열 배열입니다.
"use_dynamic_url"
- true인 경우 동적 ID를 통해서만 리소스에 액세스할 수 있도록 허용합니다. 동적 ID는 세션별로 생성됩니다. 즉, 브라우저가 다시 시작되거나 확장 프로그램이 새로고침될 때 다시 생성됩니다.
각 요소는 "resources"
요소와 "matches"
또는 "extension_ids"
요소를 포함해야 합니다. 이렇게 하면 지정된 리소스를 패턴과 일치하는 웹페이지 또는 일치하는 ID가 있는 확장 프로그램에 노출하는 매핑이 설정됩니다. "use_dynamic_url"
요소는 선택사항입니다.
리소스 탐색 용이성
리소스는 URL을 통해 웹페이지에서 사용할 수 있습니다.
runtime.getURL()
로 생성할 수 있는 chrome-extension://[PACKAGE ID]/[PATH]
메서드를 사용하여 축소하도록 요청합니다. 리소스는 적절한 CORS 헤더와 함께 제공되므로 사용할 수 있습니다.
fetch()
을(를) 통해
리소스가 웹 액세스 가능으로 표시되지 않으면 웹 출처에서 확장 프로그램 리소스로의 탐색이 차단됩니다. 다음과 같은 특수한 사례에 유의하세요.
- 확장 프로그램이 webRequest API를 사용하여 공개 리소스 요청을 웹에 액세스할 수 없는 리소스로 리디렉션하는 경우에도 이러한 요청이 차단됩니다.
- 이는 웹 액세스가 불가능한 리소스를 확장자가 포함됩니다.
"incognito"
필드의 값이"split"
로 설정되지 않으면 시크릿 모드에서 탐색이 차단됩니다.
콘텐츠 스크립트 자체는 허용되어야 할 필요가 없습니다.
예
웹 액세스 가능한 리소스 예시에서는 작동하는 확장 프로그램에서 이 요소를 사용하는 방법을 보여줍니다.