Ochrona prywatności użytkownika

Użytkownicy nie zainstalują rozszerzenia, jeśli narusza to ich prywatność lub poprosi o więcej uprawnień, których może potrzebować. Prośby o przyznanie uprawnień powinny być zrozumiałe dla użytkowników i ograniczone do najważniejszych informacji niezbędnych do zaimplementowania rozszerzenia. Rozszerzenia, które zbierają lub przesyłają takie dane, muszą być zgodne z zasadami podanymi w sekcji Ochrona prywatności użytkownika.

Stosuj te środki ostrożności, aby chronić i szanować użytkowników korzystających z rozszerzeń.

Zmniejsz wymagane uprawnienia

Interfejsy API, do których rozszerzenie ma dostęp, są określone w polu permissions pliku manifestu. Im więcej pozwoleń przyznasz, tym więcej możliwości przechwycenia informacji musi przechwycić atakujący. Należy uwzględnić tylko te interfejsy API, od których zależy rozszerzenie. Warto rozważyć mniej inwazyjne opcje. Im mniej uprawnień prosi o uprawnienie, tym mniej ostrzeżeń będzie wyświetlanych użytkownikowi. Użytkownicy z większym prawdopodobieństwem zainstalują rozszerzenie z ograniczonymi ostrzeżeniami.

Rozszerzenia nie powinny „zapewniać na przyszłość” dostępu do danych użytkownika przez żądanie uprawnień, których obecnie nie potrzebują, ale mogą zostać wprowadzone w przyszłości. Uwzględnij nowe uprawnienia wraz z aktualizacjami rozszerzeń i rozważ ustawienie ich jako opcjonalnych.

activeTab

Rozszerzenia, które korzystają z uprawnień hosta do wstrzykiwania skryptów, często mogą zastąpić parametr activeTab. Uprawnienie activeTab spowoduje tymczasowy dostęp rozszerzenia do obecnie aktywnej karty tylko wtedy, gdy użytkownik je wywoła. Dostęp zostanie zablokowany, gdy użytkownik opuści bieżącą kartę lub ją zamknie. Jest alternatywą dla wielu zastosowań <all_urls>.

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
  "permissions": ["activeTab"],
  "manifest_version": 3
}

Uprawnienie ActiveTab nie wyświetla żadnych komunikatów ostrzegawczych podczas instalacji.

Wybierz uprawnienia opcjonalne

Daj użytkownikom możliwość wybrania funkcji i uprawnień, których potrzebują w rozszerzeniu, dodając opcjonalne uprawnienia. Jeśli dana funkcja nie jest niezbędna do realizowania głównej funkcjonalności rozszerzenia, ustaw ją jako opcjonalną i przenieś interfejs API lub domenę do pola optional_permissions.

{
  "name": "Very Secure Extension",
  ...
  "optional_permissions": [ "tabs", ],
  "optional_host_permissions": ["https://www.google.com/" ],
  ...
}

Uwzględnienie opcjonalnych uprawnień pozwala rozszerzeniu wyjaśnić, dlaczego potrzebuje danego uprawnienia, gdy użytkownik włączy daną funkcję. Rozszerzenie może umożliwiać użytkownikowi włączenie różnych funkcji.

Zrzut ekranu z wyskakującym okienkiem z prośbą o włączenie uprawnień

Kliknięcie OK! spowoduje wywołanie następującego zdarzenia w skrypcie service worker.

chrome.action.onClicked.addListener((event) => {
  // Permissions must be requested from inside a user gesture, like a button's
  // click handler.
  chrome.permissions.request(
    {
      permissions: ["tabs", "scripting"],
      origins: ['https://www.google.com/']
    },
    function (granted) {
      // The callback argument will be true if the user granted the permissions.
      if (granted) {
        // doSomething();
      } else {
        // doSomethingElse();
      }
    }
  );
});

Następnie użytkownik zobaczy prośbę z tą prośbą.

Zrzut ekranu przedstawiający prośbę o opcjonalne uprawnienia.

Opcjonalne uprawnienia można również wdrożyć w aktualizacji rozszerzenia. Spowoduje to udostępnienie nowej funkcji użytkownikom bez wyłączania rozszerzenia, co może się zdarzyć w przypadku aktualizacji z nowymi wymaganymi uprawnieniami.

Ograniczaj i zabezpieczaj dane użytkowników

Poproś o minimalną ilość danych, której wymaga rozszerzenie. Im mniej informacji, które rozszerzenie poprosi użytkownika, oznacza mniejszą ekspozycję rozszerzenia.

Do wszystkich żądanych danych użytkownika należy podchodzić z rozwagą. Przechowuj i pobieraj dane na bezpiecznym serwerze w zarejestrowanej domenie. Do łączenia się zawsze używaj protokołu HTTPS i unikaj przechowywania poufnych danych użytkownika po stronie klienta rozszerzenia, ponieważ pamięć rozszerzenia nie jest szyfrowana.

Zapisywanie danych i tryb incognito

Rozszerzenia mogą zapisywać dane za pomocą interfejsu storage API lub przez wysyłanie żądań serwera, które powodują zapisanie danych. Gdy rozszerzenie musi coś zapisać, najpierw zastanów się, czy pochodzi ono z okna incognito. Domyślnie rozszerzenia nie działają w oknach incognito.

Tryb incognito obiecuje, że w oknie nie pozostaną żadne ślady. W przypadku danych z okna incognito rozszerzenia powinny brać to pod uwagę. Jeśli rozszerzenie zwykle zapisuje historię przeglądania, nie zapisuj historii z okna incognito. Rozszerzenia mogą jednak zapisywać ustawienia w dowolnym oknie – zarówno w trybie incognito, jak i innego.

Aby sprawdzić, czy okno jest w trybie incognito, sprawdź właściwość incognito odpowiedniego obiektu tabs.Tab lub windows.Window.

function saveTabData(tab) {
  if (tab.incognito) {
    return;
  } else {
    chrome.storage.local.set({data: tab.url});
  }
}