Zwiększanie bezpieczeństwa rozszerzeń

Poprawa zabezpieczeń w pliku manifestu w wersji 3

To ostatnia z 3 sekcji opisujących zmiany potrzebne w kodzie, który nie jest częścią rozszerzenia usługi. Opisuje ona zmiany wymagane w celu zwiększenia bezpieczeństwa rozszerzeń. Pozostałe 2 sekcje dotyczą aktualizowania kodu, który jest potrzebny do przejścia na Manifest V3, oraz zastępowania blokujących żądań internetowych.

Usuwanie wykonywania dowolnych ciągów znaków

Nie możesz już wykonywać logiki zewnętrznej za pomocą funkcji executeScript(), eval()new Function().

  • Przenieś cały kod zewnętrzny (JS, Wasm, CSS) do pakietu rozszerzenia.
  • Zaktualizuj odwołania do skryptu i stylów, aby wczytywać zasoby z pakietu rozszerzenia.
  • Użyj funkcji chrome.runtime.getURL(), aby tworzyć adresy URL zasobów w czasie wykonywania.
  • Użyj iframe w piaskownicy: eval i new Function(...) są nadal obsługiwane w elementach iframe w piaskownicy. Więcej informacji znajdziesz w przewodniku na temat ramek iframe w piaskownicy.

Metoda executeScript() znajduje się teraz w przestrzeni nazw scripting, a nie tabs. Informacje o aktualizowaniu połączeń znajdziesz w artykule Przenoszenie executeScript().

Istnieją jednak specjalne przypadki, w których nadal można wykonać dowolny ciąg znaków:

Usuwanie kodu hostowanego zdalnie

W przypadku platformy Manifest V3 cała logika rozszerzenia musi znajdować się w pakiecie rozszerzenia. Zgodnie z zasadami Chrome Web Store nie można już wczytywać ani wykonywać plików hostowanych zdalnie. Przykłady:

  • pliki JavaScript pobierane z serwera dewelopera;
  • każda biblioteka hostowana w CDN;
  • Biblioteki innych firm w pakiecie, które dynamicznie pobierają kod hostowany zdalnie.

W zależności od przypadku użycia i powodu korzystania z hostingu zdalnego dostępne są alternatywne rozwiązania. W tej sekcji znajdziesz opisy metod, które warto wziąć pod uwagę. Jeśli masz problemy z kodem hostowanym zdalnie, zapoznaj się z tymi wskazówkami.

Funkcje i logika oparte na konfiguracji

Rozszerzenie wczytuje i przechowuje w pamięci podręcznej konfigurację zdalną (np. plik JSON) w czasie działania. Konfiguracja w pamięci podręcznej określa, które funkcje są włączone.

Logikę zewnętrzną z usługą zewnętrzną

rozszerzenie wywołuje usługę internetową na zdalnym serwerze. Dzięki temu możesz zachować kod w prywatności i zmieniać go w miarę potrzeby, unikając dodatkowego obciążenia związanego z ponownie przesyłaniem go do Chrome Web Store.

Umieszczenie kodu hostowanego zdalnie w elemencie iframe umieszczonym w piaskownicy

Kod hostowany zdalnie jest obsługiwany w elementach iframe umieszczonych w piaskownicy. Pamiętaj, że ta metoda nie zadziała, jeśli kod wymaga dostępu do DOM strony, na której jest umieszczony.

Pakiety bibliotek innych firm

Jeśli używasz popularnego frameworka, takiego jak React czy Bootstrap, który wcześniej wczytywałeś z zewnętrznego serwera, możesz pobrać zminiaturyzowane pliki, dodać je do projektu i zaimportować je lokalnie. Na przykład:

<script src="./react-dom.production.min.js"></script>
<link href="./bootstrap.min.css" rel="stylesheet">

Aby uwzględnić bibliotekę w usługach działających w tle, ustaw w pliku manifestu klucz "background.type" na "module" i użyj instrukcji import.

Korzystanie z bibliotek zewnętrznych w skryptach wstrzykiwanych w kartach

Możesz też wczytywać biblioteki zewnętrzne w czasie wykonywania, dodając je do tablicy files podczas wywoływania funkcji scripting.executeScript(). Dane możesz nadal wczytywać zdalnie w czasie wykonywania.

chrome.scripting.executeScript({
  target: {tabId: tab.id},
  files: ['jquery-min.js', 'content-script.js']
});

Wstawianie funkcji

Jeśli potrzebujesz większej dynamiki, nowa właściwość func w elementach scripting.executeScript() umożliwia wstawianie funkcji jako skryptu treści i przekazywanie zmiennych za pomocą właściwości args.

(platforma) Manifest V2
let name = 'World!';
chrome.tabs.executeScript({
  code: `alert('Hello, ${name}!')`
});

W pliku skryptu w tle.

(platforma) Manifest V3
async function getCurrentTab() {/* ... */}
let tab = await getCurrentTab();

function showAlert(givenName) {
  alert(`Hello, ${givenName}`);
}

let name = 'World';
chrome.scripting.executeScript({
  target: {tabId: tab.id},
  func: showAlert,
  args: [name],
});

W tle service worker.

Repozytorium Chrome Extension Samples zawiera przykład wstrzyknięcia funkcji, który możesz przejrzeć krok po kroku. Przykład funkcji getCurrentTab() znajdziesz w sekcji Informacje.

Poszukaj innych rozwiązań

Jeśli poprzednie metody nie pomogą w Twoim przypadku, być może trzeba będzie znaleźć alternatywne rozwiązanie (np. przejść na inną bibliotekę) lub znaleźć inne sposoby korzystania z funkcji biblioteki. Na przykład w przypadku Google Analytics możesz zamiast oficjalnej wersji JavaScript hostowanej zdalnie przejść na platformę Measurement Protocol od Google, jak opisano w przewodniku Google Analytics 4.

Zaktualizuj zasady zabezpieczeń treści

Obiekt "content_security_policy" nie został usunięty z pliku manifest.json, ale jest teraz słownikiem, który obsługuje 2 właściwości: "extension_pages""sandbox".

(platforma) Manifest V2
{
  ...
  "content_security_policy": "default-src 'self'"
  ...
}
(platforma) Manifest V3
{
  ...
  "content_security_policy": {
    "extension_pages": "default-src 'self'",
    "sandbox": "..."
  }
  ...
}

extension_pages: odnosi się do kontekstów w rozszerzeniu, w tym plików HTML i usług.

sandbox: odnosi się do wszystkich stron rozszerzenia w piaskownicy, których używa rozszerzenie.

Usuwanie nieobsługiwanych zasad zabezpieczeń treści

Manifest V3 nie zezwala na niektóre wartości zasad bezpieczeństwa treści w polu "extension_pages", które były dozwolone w manifeście V2. W szczególności Manifest V3 nie zezwala na te, które umożliwiają zdalne wykonywanie kodu. Polecenia script-src,, object-srcworker-src mogą mieć tylko te wartości:

  • self
  • none
  • wasm-unsafe-eval
  • Tylko rozpakowane rozszerzenia: dowolne źródło localhost (http://localhost, http://127.0.0.1 lub dowolny port w tych domenach)

Wartości zasad bezpieczeństwa treści w przypadku sandbox nie mają takich nowych ograniczeń.