To, czy rozszerzenie ma dostęp do stron internetowych i większości interfejsów API Chrome, zależy od zadeklarowanych uprawnień. Uprawnienia powinny obejmować tylko te elementy, które są niezbędne do działania danego działania. Ograniczenie uprawnień określa możliwości rozszerzenia i zmniejsza ryzyko włamania na dane, jeśli osoba przeprowadzająca atak zostanie przejęta. Chroń rozszerzenia i ich użytkowników przez wdrożenie uprawnień jednoznaczne, minimalne i opcjonalnych.
Uporządkuj uprawnienia
Uprawnienia to znane ciągi znaków odwołujące się do interfejsu Chrome API lub wzorców dopasowania, które przyznają dostęp do co najmniej jednego hosta. Są one wymienione w pliku manifestu i określone jako wymagane lub opcjonalne uprawnienia.
{
"name": "Permissions Extension",
...
// required permissions
"permissions": [
"activeTab",
"contextMenus",
"storage"
],
// optional permissions
"optional_permissions": [
"topSites",
"http://www.developer.chrome.com/*"
],
...
"manifest_version": 2
}
Ogranicz wymagane uprawnienia tylko do tych, które są niezbędne do działania głównej funkcji rozszerzenia. Rozszerzenie nie może żądać więcej uprawnień, niż jest potrzebne. Nie potwierdzaj w przyszłości, prosząc o uprawnienia, które mogą być potrzebne podczas aktualizacji.
Uprawnienia wymagane do korzystania z funkcji opcjonalnych powinny być zarejestrowane jako uprawnienia opcjonalne. Dzięki temu użytkownicy mogą decydować, w jakim zakresie chcą udostępnić rozszerzenie i które funkcje są pożądane.
Zidentyfikuj wymagane uprawnienia
Proste rozszerzenie może wymagać wielu uprawnień, a w przypadku wielu uprawnień wyświetlane są ostrzeżenia dotyczące instalacji. Użytkownicy z większym prawdopodobieństwem ufają rozszerzeniu z ograniczonymi ostrzeżeniami lub po wyjaśnieniem uprawnień.
Określ główne funkcje rozszerzenia i informacje o uprawnieniach, które są do niego wymagane. Rozważ ustawienie funkcji jako opcjonalnych, jeśli wymagają uprawnień z ostrzeżeniami.
Aktywowanie uprawnień opcjonalnych ze zdarzeniami
Główna funkcja przykładowego rozszerzenia uprawnień opcjonalnych zastępuje stronę nowej karty. Jedna z funkcji wyświetla cel dnia użytkownika. Ta funkcja wymaga tylko uprawnienia do miejsca na dane, które nie zawiera ostrzeżenia.
Rozszerzenie ma dodatkową funkcję, która umożliwia wyświetlanie najpopularniejszych witryn użytkownika. Ta funkcja wymaga uprawnienia topSites, które zawierają ostrzeżenie.
Opracowanie funkcji wykorzystujących uprawnienia z ostrzeżeniami jako opcjonalne i bezpłatne wprowadzenie ich umożliwia użytkownikom bez ryzyka wprowadzenie rozszerzenia. Dzięki temu użytkownicy mogą jeszcze lepiej dostosować sposób korzystania z rozszerzenia do swoich potrzeb, a także zapoznać się z ostrzeżeniami.
Zastąp uprawnienie ActiveTab
Uprawnienie activeTab
zapewnia tymczasowy dostęp do strony, na której znajduje się użytkownik, i pozwala rozszerzeniu na użycie uprawnienia "tabs"
w bieżącej karcie. W wielu przypadkach zastępuje konieczność "<all_urls>"
i nie wyświetla ostrzeżenia o instalacji.
Bez aktywnej karty:
Przy użyciu ActiveTab:
Uprawnienie activeTab
przyznaje rozszerzeniu tymczasowy dostęp do obecnie aktywnej karty, gdy użytkownik wywoła rozszerzenie. W przypadku przejęcia rozszerzenia haker musi poczekać, aż użytkownik go wywoła, zanim uzyska dostęp. Taki dostęp trwa tylko do czasu ominięcia karty lub zamknięcia jej.
Gdy uprawnienie activeTab
jest włączone w przypadku karty, rozszerzenie może:
- Zadzwoń na tej karcie:
tabs.executeScript
lubtabs.insertCSS
. - Pobierz URL, tytuł i favikonę danej karty za pomocą interfejsu API, który zwraca obiekt
tabs.Tab
. - Przechwytywać żądania sieciowe na karcie do źródła ramki głównej karty za pomocą interfejsu API webRequest. Rozszerzenie tymczasowo uzyskuje uprawnienia hosta dotyczące źródła ramki głównej karty.
activeTab
można włączyć za pomocą tych gestów użytkownika:
- wykonania działania przeglądarki.
- wykonania działania na stronie.
- Uruchamianie elementu menu kontekstowego.
- Uruchamianie skrótu klawiszowego z interfejsu Commands API.
- Akceptowanie sugestii z interfejsu API omniboksu
Zezwalanie na dostęp
Jeśli rozszerzenie potrzebuje dostępu do adresów URL file://
lub działa w trybie incognito, użytkownicy muszą włączyć dostęp do tych funkcji na stronie z informacjami o rozszerzeniu na chrome://extensions.
Rozszerzenie może wykryć, czy jest włączone w trybie incognito, wywołując metodę extension.isAllowedIncognitoAccess()
, lub uruchamiać je pod adresami URL file://
za pomocą extension.isAllowedFileSchemeAccess()
.
Informacje o uprawnieniach
Istnieją ostrzeżenia dotyczące uprawnień do opisania możliwości, jakie interfejs API przyznaje użytkownikom rozszerzeń, ale niektóre z tych ostrzeżeń na początku mogą nie być oczywiste. Na przykład dodanie uprawnienia "tabs"
spowoduje wyświetlenie pozornie niepowiązanego ostrzeżenia: rozszerzenie może odczytywać aktywność związaną z przeglądaniem. Interfejsu API chrome.tabs
można używać tylko do otwierania nowych kart, ale można go też używać do wyświetlania adresu URL powiązanego z każdą nowo otwartą kartą za pomocą obiektów tabs.Tab.
Jeśli to możliwe, zastosuj uprawnienia opcjonalne lub mniej wydajny interfejs API, aby uniknąć niepokojących ostrzeżeń.
Wyświetlanie ostrzeżeń
Jeśli rozszerzenie zostanie załadowane jako plik bez pakietu, nie będą wyświetlane żadne ostrzeżenia o uprawnieniach. Aby wyświetlić ostrzeżenia dotyczące uprawnień rozszerzenia, otwórz chrome://extensions
, upewnij się, że tryb programisty jest włączony, i kliknij PACKUJ ROZSZERZENIE.
Podaj ścieżkę do folderu rozszerzenia w polu Katalog główny rozszerzenia, a następnie kliknij przycisk Umieść rozszerzenie w pakiecie. W przypadku pakowanego pierwszego pakietu zignoruj pole Klucz prywatny.
Chrome utworzy 2 pliki – .crx
i .pem
, które będą zawierać klucz prywatny rozszerzenia.
Nie trać klucza prywatnego. Przechowuj plik .pem
w bezpiecznym i bezpiecznym miejscu. Będzie trzeba go zaktualizować rozszerzenie.
Zainstaluj plik .crx
, upuszczając go na stronie Zarządzanie rozszerzeniem do Chrome.
Po usunięciu pliku .crx
przeglądarka zapyta, czy można dodać rozszerzenie i wyświetli ostrzeżenia.
Uprawnienia z ostrzeżeniami
Uwaga: tabele uprawnień są aktualizowane zgodnie z zasadą możliwie najlepszej obsługi i mogą zawierać niewielkie rozbieżności w stosunku do aktualnych ostrzeżeń. Poza tym niektóre uprawnienia mogą nie wyświetlać ostrzeżeń, jeśli są sparowane z innymi uprawnieniami. Na przykład ostrzeżenie "tabs"
nie wyświetli się, jeśli rozszerzenie zażąda też "<all_urls>"
. Aby sprawdzić najnowsze ostrzeżenia dotyczące uprawnień rozszerzeń, wykonaj czynności opisane w sekcji Wyświetlanie ostrzeżeń.
Uprawnienia | Opis | Ostrzeżenie |
---|---|---|
|
Przyznaje rozszerzeniu dostęp do wszystkich hostów. Można uniknąć zadeklarowania uprawnień hosta przy użyciu uprawnienia activeTab. | Odczytywanie i zmienianie wszystkich Twoich danych na odwiedzanych stronach |
"https://HostName.com/" |
Przyznaje rozszerzeniu dostęp do: "https://HostName.com/" . Można uniknąć zadeklarowania uprawnień hosta przy użyciu uprawnienia activeTab. |
Odczytywanie i modyfikowanie Twoich danych na stronie HostName.com |
"bookmarks" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.bookmarks. | Odczytywanie i zmienianie zakładek |
"clipboardRead" |
Wymagane, jeśli rozszerzenie używa parametru document.execCommand('paste') . |
Odczytywanie danych, które kopiujesz i wklejasz |
"clipboardWrite" |
Wskazuje, że rozszerzenie używa właściwości document.execCommand('copy') lub document.execCommand('cut') . |
Modyfikowanie danych, które kopiujesz i wklejasz |
"contentSettings" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.contentSettings. | Zmień ustawienia, które kontrolują dostęp witryn do takich funkcji jak pliki cookie, JavaScript, wtyczki, geolokalizacja, mikrofon, kamera itp. |
"debugger" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.debugger. |
|
"declarativeNetRequest" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.declarativeNetRequest. | Blokowanie treści strony |
"desktopCapture" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.desktopCapture. | Przechwytywanie zawartości ekranu |
"downloads" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.downloads. | Zarządzanie pobranymi plikami |
"geolocation" |
Zezwala rozszerzeniu na używanie interfejsu API geolokalizacji HTML5 bez pytania użytkownika o zgodę. | Wykrywanie fizycznej lokalizacji |
"history" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.history. | Odczytywanie i zmienianie historii przeglądania |
"management" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.management. | Zarządzanie aplikacjami, rozszerzeniami i motywami |
"nativeMessaging" |
Przyznaje rozszerzeniu dostęp do interfejsu API natywnego przesyłania wiadomości. | Komunikacja ze współpracującymi aplikacjami natywnymi |
"notifications" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.notifications. | Wyświetlanie powiadomień |
"pageCapture" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.pageCapture. | Odczytywanie i zmienianie wszystkich Twoich danych na odwiedzanych stronach |
"privacy" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.privacy. | Zmienianie ustawień prywatności |
"proxy" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.proxy. | Odczytywanie i zmienianie wszystkich Twoich danych na odwiedzanych stronach |
"system.storage" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.system.storage. | Identyfikowanie i wyjmowanie urządzeń pamięci masowej |
"tabCapture" |
Przyznaje rozszerzeniom dostęp do interfejsu API chrome.tabCapture. | Odczytywanie i zmienianie wszystkich Twoich danych na odwiedzanych stronach |
"tabs" |
Przyznaje rozszerzeniu dostęp do pól z podwyższonymi uprawnieniami obiektów Tab używanych przez kilka interfejsów API, w tym chrome.tabs i chrome.windows. W wielu przypadkach rozszerzenie nie musi deklarować uprawnienia "tabs" , aby korzystać z tych interfejsów API. |
Odczytywanie historii przeglądania |
"topSites" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.topSites. | Wyświetlanie listy najczęściej odwiedzanych stron |
"ttsEngine" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.ttsEngine. | Odczytywanie całego tekstu mówionego przy użyciu syntezatora mowy |
"webNavigation" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.webNavigation. | Odczytywanie historii przeglądania |
Aktualizuj uprawnienia
Dodanie rozszerzenia o dodatkowe uprawnienia może spowodować jego tymczasowe wyłączenie. Użytkownik będzie musiał ponownie je włączyć, gdy zaakceptuje nowe ostrzeżenia.
Jeśli użytkownik ręcznie zaktualizuje rozszerzenie, które ma teraz uprawnienia do kart, zobaczy ostrzeżenie na stronie zarządzania.
Jeśli rozszerzenie zostanie zaktualizowane automatycznie, zostanie wyłączone, dopóki użytkownik nie wyrazi zgody na nowe uprawnienia.
Aby tego uniknąć, zmień nową funkcję jako opcjonalną i dodaj nowe aktualizacje uprawnień w optional_permissions
w pliku manifestu.