Zdolność rozszerzenia do uzyskiwania dostępu do stron internetowych i większości interfejsów API Chrome zależy od permissions. Uprawnienia powinny być ograniczone tylko do tych, które są niezbędne do działania danego elementu. Ograniczenie uprawnień określa możliwości rozszerzenia i ogranicza ryzyko włamania do danych czy rozszerzenie zostało przejęte przez atakującego. Chroń rozszerzenia i ich użytkowników, stosując uprawnień bezpośrednich, minimalnych i opcjonalnych.
Uporządkuj uprawnienia
Uprawnienia to znane ciągi znaków odwołujące się do interfejsu API Chrome 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 uprawnienia 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. An rozszerzenie nie powinno wymagać większych uprawnień, niż jest obecnie potrzebne; nie przewidujemy w przyszłości prosi o uprawnienia, które mogą być wymagane przy aktualizacjach.
Uprawnienia wymagane do korzystania z funkcji opcjonalnych powinny być zarejestrowane jako uprawnienia opcjonalne. Ten pozwala użytkownikom zdecydować, jaki poziom dostępu chcą zapewnić rozszerzenie i które funkcje są pożądane.
Zidentyfikuj wymagane uprawnienia
Proste rozszerzenie może wymagać wielu uprawnień i wyświetla się wiele uprawnień ostrzeżeń dotyczących instalacji. Użytkownicy z większym prawdopodobieństwem ufają rozszerzeniu, które ma ograniczone ostrzeżenia lub gdy wyjaśnimy im uprawnienia.
Określ główną funkcjonalność rozszerzenia i określ, jakie uprawnienia są do niego wymagane. Rozważ ustawienia funkcji jako opcjonalne, jeśli wymagają uprawnień z ostrzeżeniami.
Aktywowanie opcjonalnych uprawnień ze zdarzeniami
Główna funkcja przykładowego rozszerzenia opcjonalnych uprawnień zastępuje stronę nowej karty. Jedna z nich to wyświetlanie celu użytkownika na dany dzień. Ta funkcja wymaga tylko miejsca na dane bez ostrzeżenia.
Rozszerzenie ma dodatkową funkcję: w których wyświetlane są najpopularniejsze witryny użytkownika. Ta funkcja wymaga: uprawnienie topSites, które zawiera ostrzeżenie.
opracowywanie funkcji zależnych od uprawnień z opcjonalnymi ostrzeżeniami oraz wprowadzanie tych; pozwala użytkownikom bezpłatnie zapoznać się z rozszerzeniem. Dodatkowo pozwala użytkownikom jeszcze bardziej dostosować sposób korzystania z rozszerzenia i zapewnić im możliwość i wyjaśniać ostrzeżenia.
Zastępowanie uprawnienia ActiveTab
Uprawnienie activeTab
zapewnia tymczasowy dostęp do strony, w której znajduje się użytkownik, oraz zezwala
aby używać uprawnienia "tabs"
na bieżącej karcie. Zastępuje to potrzebę
"<all_urls>"
w wielu przypadkach i nie wyświetla ostrzeżenia o instalacji.
Bez aktywnej karty:
W przypadku funkcji ActiveTab:
Uprawnienie activeTab
przyznaje rozszerzeniu tymczasowy dostęp do aktualnie aktywnej karty, gdy
użytkownik wywołuje rozszerzenie. Jeśli rozszerzenie zostanie przejęte, osoba przeprowadzająca atak będzie musiał poczekać.
przed uzyskaniem dostępu przez użytkownika do wywołania rozszerzenia. Dostęp ten będzie obowiązywał do
użytkownik przechodzi do danej karty lub ją zamyka.
Gdy uprawnienie activeTab
jest włączone dla danej karty, rozszerzenie może:
- Zadzwoń pod numer
tabs.executeScript
lubtabs.insertCSS
na tej karcie. - Pobierz URL, tytuł i favikonę tej karty za pomocą interfejsu API, który zwraca obiekt
tabs.Tab
. - Przechwytywać żądania sieciowe na karcie do źródła głównej ramki karty za pomocą żądania webRequest API. Rozszerzenie tymczasowo otrzymuje uprawnienia hosta dotyczące źródła głównej ramki karty.
Te gesty umożliwiają korzystanie z usługi activeTab
:
- wykonywanie czynności w przeglądarce.
- wykonanie działania związanego ze stroną.
- Wykonywanie pozycji menu kontekstowego
- Wykonywanie skrótu klawiszowego za pomocą interfejsu API poleceń
- Zaakceptowanie sugestii z interfejsu API omniboksu
Zezwolenie na dostęp
Jeśli rozszerzenie potrzebuje dostępu do adresów URL file://
lub działa w trybie incognito, użytkownicy muszą:
włącz dostęp do tych funkcji na stronie szczegółów rozszerzenia pod adresem chrome://extensions.
Rozszerzenie może wykryć, czy zostało włączone w trybie incognito, wywołując połączenie
extension.isAllowedIncognitoAccess()
lub może działać na file://
adresach URL z parametrem
extension.isAllowedFileSchemeAccess()
Informacje o uprawnieniach
Ostrzeżenia o uprawnieniach opisują możliwości zapewniane przez interfejs API użytkownikom rozszerzeń, ale
niektóre z tych ostrzeżeń mogą nie być oczywiste na początku. Na przykład dodanie funkcji "tabs"
powoduje wyświetlenie pozornie niepowiązanego ostrzeżenia: rozszerzenie może odczytywać przeglądanie
aktywności. Interfejsu chrome.tabs
API można używać tylko do otwierania nowych kart
aby sprawdzić adres URL powiązany z każdą nowo otwartą kartą przy użyciu obiektów tabs.Tab.
Gdy to możliwe, zaimplementuj opcjonalne uprawnienia lub mniej zaawansowany interfejs API, aby uniknąć alarmu ostrzeżeniami.
Wyświetlanie ostrzeżeń
Jeśli rozszerzenie zostanie wczytane w postaci rozpakowanego pliku, nie pojawią się żadne ostrzeżenia o uprawnieniach. Aby wyświetlić
ostrzeżenia o uprawnieniach rozszerzenia, otwórz chrome://extensions
i upewnij się, że tryb programisty jest włączony
i kliknij Spakuj ROZSZERZENIE.
W polu Katalog główny rozszerzenia określ ścieżkę do folderu rozszerzenia, a następnie kliknij Przycisk Umieść rozszerzenie w pakiecie. W przypadku pakietu tworzonego po raz pierwszy zignoruj pole Klucz prywatny.
Chrome utworzy dwa pliki: .crx
i .pem
, które zawierają treść
klucz prywatny.
Nie trać klucza prywatnego. Przechowuj plik .pem
w bezpiecznym i bezpiecznym miejscu. będzie
potrzebne do zaktualizowania rozszerzenia.
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 go wyświetlić
ostrzeżeniami.
Uprawnienia z ostrzeżeniami
Uwaga: tabele uprawnień są aktualizowane zgodnie z zasadą możliwie najlepszej obsługi i mogą zawierać niewielkie rozbieżności.
z bieżącymi ostrzeżeniami. Dodatkowo niektóre uprawnienia mogą nie wyświetlać ostrzeżeń po sparowaniu z
inne uprawnienia. Na przykład ostrzeżenie "tabs"
nie pojawi się, jeśli rozszerzenie
prosi o "<all_urls>"
. Aby sprawdzić ostatnie ostrzeżenia dotyczące uprawnień rozszerzeń, postępuj zgodnie z instrukcjami
czynności opisane w artykule Wyświetlanie ostrzeżeń.
Uprawnienie | Opis | Ostrzeżenie |
---|---|---|
|
Przyznaje rozszerzeniu dostęp do wszystkich hostów. Można uniknąć deklarowania uprawnień hosta przy użyciu polecenia uprawnienie activeTab. | Odczytywanie i zmienianie wszystkich Twoich danych na odwiedzanych stronach |
"https://HostName.com/" |
Przyznaje rozszerzeniu dostęp do: "https://HostName.com/" . Można uniknąć deklarowania
uprawnień hosta za pomocą uprawnienia activeTab. |
Odczytywanie i zmienianie Twoich danych na stronie HostName.com |
"bookmarks" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.bookmarks. | Odczytywanie i zmienianie zakładek |
"clipboardRead" |
Wymagany, jeśli rozszerzenie używa identyfikatora document.execCommand('paste') . |
Odczytywanie danych, które kopiujesz i wklejasz |
"clipboardWrite" |
Wskazuje, że rozszerzenie używa parametru 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 dotyczące stron internetowych dostęp do funkcji takich 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. | rejestrowanie 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 Twojej lokalizacji fizycznej |
"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 natywnego interfejsu API do obsługi wiadomości. | Komunikowanie się 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
w wielu przypadkach rozszerzenie nie będzie musiało deklarować uprawnień "tabs" , aby korzystać z
dla tych interfejsów API. |
Odczytywanie historii przeglądania |
"topSites" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.topSites. | Przeglądanie listy najczęściej odwiedzanych stron |
"ttsEngine" |
Przyznaje rozszerzeniu dostęp do interfejsu API chrome.ttsEngine. | Czytanie 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 dodatkowych uprawnień do rozszerzenia może spowodować jego tymczasowe wyłączenie. Użytkownik będzie musiał włącz ją ponownie, jeśli wyrazisz zgodę na wszystkie nowe ostrzeżenia.
Jeśli użytkownik ręcznie zaktualizuje rozszerzenie, które zawiera teraz uprawnienie karty, ostrzeżenie na stronie zarządzania.
Jeśli rozszerzenie zostanie zaktualizowane automatycznie, zostanie wyłączone, dopóki użytkownik nie wyrazi zgody na nowe uprawnień.
Aby tego uniknąć, ustaw nową funkcję jako opcjonalną i dodaj nowe uprawnienia do:
optional_permissions
w pliku manifestu.