Deklarowanie uprawnień i ostrzeganie użytkowników

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ń.

Ostrzeżenia o uprawnieniach rozszerzeń podczas instalacji

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.

Przycisk rozszerzenia, który włącza dodatkowe funkcje

Rozszerzenie ma dodatkową funkcję, która umożliwia wyświetlanie najpopularniejszych witryn użytkownika. Ta funkcja wymaga uprawnienia topSites, które zawierają ostrzeżenie.

Ostrzeżenie dotyczące rozszerzenia interfejsu API topSites

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:

Interfejs uprawnień bez aktywnej karty

Przy użyciu ActiveTab:

Interfejs uprawnień z 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 lub tabs.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:

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.

Zezwalaj na adresy URL plików i tryb incognito na stronie z informacjami o rozszerzeniu

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.

Tryb programisty jest zaznaczony, a następnie kliknij opcję Spakuj 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.

Podaj ścieżkę rozszerzenia, a następnie kliknij Pakiet rozszerzeń

Chrome utworzy 2 pliki – .crx i .pem, które będą zawierać klucz prywatny rozszerzenia.

Spakowane pliki rozszerzeń

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.

Upuść plik, by zainstalować

Po usunięciu pliku .crx przeglądarka zapyta, czy można dodać rozszerzenie i wyświetli ostrzeżenia.

Ostrzeżenie dotyczące rozszerzenia Nowa karta

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
  • "http://*/*"
  • "https://*/*"
  • "*://*/*"
  • "<all_urls>"
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.
  • Uzyskiwanie dostępu do backendu debugera stron
  • Odczytywanie i zmienianie wszystkich Twoich danych na odwiedzanych stronach
"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.

Uprawnienia dotyczące dodawania kart

Jeśli rozszerzenie zostanie zaktualizowane automatycznie, zostanie wyłączone, dopóki użytkownik nie wyrazi zgody na nowe uprawnienia.

Rozszerzenie zostało wyłączone

Wyraź zgodę na uprawnienia

Aby tego uniknąć, zmień nową funkcję jako opcjonalną i dodaj nowe aktualizacje uprawnień w optional_permissions w pliku manifestu.