Ochrona prywatności użytkowników

Użytkownicy nie zainstalują rozszerzenia, jeśli zagraża ono ich prywatności lub prosi o więcej uprawnień, niż wydaje się potrzebne. Prośby o przyznanie uprawnień powinny być zrozumiałe dla użytkowników i ograniczone do najważniejszych informacji niezbędnych do wdrożenia rozszerzenia. Rozszerzenia, które zbierają lub przesyłają jakiekolwiek dane użytkownika, muszą być zgodne z zasadami w sekcji Ochrona prywatności użytkownika.

Chroń użytkowników rozszerzeń i szanuj ich prywatność, stosując te środki ostrożności, aby zapewnić bezpieczeństwo ich tożsamości.

Zmniejszanie liczby wymaganych uprawnień

Interfejsy API, do których rozszerzenie może uzyskać dostęp, są określone w polu permissions manifestu. Im więcej uprawnień przyznasz, tym więcej możliwości przechwycenia informacji będzie miał atakujący. Należy podać tylko interfejsy API, od których zależy rozszerzenie, i rozważyć mniej inwazyjne opcje. Im mniej uprawnień zażąda rozszerzenie, tym mniej ostrzeżeń o uprawnieniach będzie wyświetlanych użytkownikowi. Użytkownicy chętniej instalują rozszerzenia, w przypadku których wyświetla się niewiele ostrzeżeń.

Rozszerzenia nie powinny „na zapas” prosić o dostęp do danych użytkownika, czyli żądać uprawnień, których obecnie nie potrzebują, ale mogą wykorzystać w przyszłości. Dołączaj nowe uprawnienia do aktualizacji rozszerzeń i rozważ uczynienie ich opcjonalnymi.

activeTab

Rozszerzenia, które używają uprawnień hosta do wstrzykiwania skryptów, mogą często zamiast tego używać activeTab. Uprawnienie activeTab przyznaje rozszerzeniu tymczasowy dostęp do aktualnie aktywnej karty tylko wtedy, gdy użytkownik wywoła rozszerzenie. Dostęp jest odcinany, gdy użytkownik opuści bieżącą kartę lub ją zamknie. Stanowi 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 komunikatów ostrzegawczych podczas instalacji.

Wybieranie uprawnień opcjonalnych

Umożliw użytkownikom wybieranie funkcji i uprawnień, których potrzebują w rozszerzeniu, poprzez uwzględnienie opcjonalnych uprawnień. Jeśli funkcja nie jest niezbędna do głównej funkcjonalności rozszerzenia, spraw, aby była opcjonalna, 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 odpowiednią funkcję. Rozszerzenie może oferować użytkownikowi możliwość włączenia funkcji.

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

Kliknięcie OK spowoduje uruchomienie w skrypcie service worker tego zdarzenia:

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();
      }
    }
  );
});

Użytkownik zobaczy wtedy następującą prośbę.

Zrzut ekranu z prośbą o uprawnienia opcjonalne.

Opcjonalne uprawnienia można też wdrożyć w ramach aktualizacji rozszerzenia. Dzięki temu nowa funkcja będzie dostępna dla użytkowników bez wyłączania rozszerzenia, co może się zdarzyć w przypadku aktualizacji z nowymi wymaganymi uprawnieniami.

Ograniczanie i zabezpieczanie informacji o użytkownikach

Proś tylko o minimalną ilość danych potrzebną rozszerzeniu. Im mniej informacji rozszerzenie wymaga od użytkownika, tym mniejsze ryzyko w przypadku naruszenia jego bezpieczeństwa.

Wszystkie dane użytkownika, o które prosisz, powinny być traktowane z należytą starannością. Przechowywanie i pobieranie danych na bezpiecznym serwerze z zarejestrowaną domeną. Zawsze używaj protokołu HTTPS do łączenia się z serwerem i unikaj przechowywania poufnych danych użytkownika po stronie klienta rozszerzenia, ponieważ pamięć rozszerzenia nie jest szyfrowana.

Oszczędzanie danych i tryb incognito

Rozszerzenia mogą zapisywać dane za pomocą interfejsu storage API lub wysyłając żądania do serwera, które powodują zapisanie danych. Gdy rozszerzenie musi coś zapisać, najpierw sprawdź, czy pochodzi z okna incognito. Domyślnie rozszerzenia nie działają w oknach incognito.

Tryb incognito zapewnia, że okno nie pozostawi żadnych śladów. W przypadku danych z okien incognito rozszerzenia powinny dotrzymywać tej obietnicy. Jeśli rozszerzenie zwykle zapisuje historię przeglądania, nie zapisuj historii z okien incognito. Rozszerzenia mogą jednak przechowywać ustawienia z dowolnego okna, w tym z okna incognito.

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});
  }
}