Die Berechtigung „activeTab“

Die Berechtigung "activeTab" gewährt einer Erweiterung vorübergehenden Zugriff auf den aktuell aktiven Tab, wenn der Nutzer die Erweiterung aufruft, z. B. durch Klicken auf ihre Aktion. Der Zugriff auf den Tab bleibt bestehen, solange der Nutzer auf dieser Seite ist. Er wird widerrufen, wenn der Nutzer die Seite verlässt oder den Tab schließt. Wenn der Nutzer die Erweiterung beispielsweise auf https://example.com aufruft und dann zu https://example.com/foo wechselt, hat die Erweiterung weiterhin Zugriff auf die Seite. Wenn der Nutzer zu https://chromium.org wechselt, wird der Zugriff widerrufen.

Dies ist eine Alternative für viele Verwendungen von "<all_urls>", aber es wird während der Installation keine Warnmeldung angezeigt:

Ohne "activeTab":

Ohne activeTab

Mit "activeTab":

Mit activeTab

Der Zugriff auf eingeschränkte Seiten wie chrome://-Seiten wird nicht gewährt.

Beispiel

Beispielerweiterung Page Redder:

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

browser.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    browser.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

Motivation

Angenommen, Sie haben eine Erweiterung zum Ausschneiden von Webinhalten, die eine Aktion und einen Kontextmenüeintrag enthält. Diese Erweiterung muss möglicherweise nur dann auf Tabs zugreifen, wenn auf ihre Aktion geklickt oder ihr Kontextmenüelement ausgeführt wird.

Ohne "activeTab" müsste diese Erweiterung vollständigen, dauerhaften Zugriff auf jede Website anfordern, nur damit sie ihre Arbeit erledigen kann, wenn sie vom Nutzer aufgerufen wird. Das ist eine Menge Macht, die einer so einfachen Erweiterung anvertraut wird. Und wenn die Erweiterung jemals kompromittiert wird, erhält der Angreifer Zugriff auf alles, was die Erweiterung hatte.

Eine Erweiterung mit der Berechtigung "activeTab" erhält dagegen nur als Reaktion auf eine explizite Nutzergeste Zugriff auf einen Tab. Wenn die Erweiterung manipuliert wurde, müsste der Angreifer warten, bis der Nutzer die Erweiterung aufruft, bevor er Zugriff erhält. Dieser Zugriff bleibt nur so lange bestehen, bis der Tab gewechselt oder geschlossen wird.

Was „activeTab“ ermöglicht

Wenn die Berechtigung "activeTab" für einen Tab aktiviert ist, kann eine Erweiterung Folgendes tun:

  • Rufen Sie auf diesem Tab scripting.insertCSS() oder scripting.executeScript() auf, wenn die "scripting"-Berechtigung ebenfalls deklariert ist (wie im Beispiel oben).
  • Die URL, den Titel und das Favicon für diesen Tab über eine API abrufen, die ein tabs.Tab-Objekt zurückgibt (im Wesentlichen gewährt "activeTab" vorübergehend die Hostberechtigung).
  • Netzwerkanfragen im Tab an den Ursprung des Hauptframes des Tabs mit der webRequest API abfangen. Die Erweiterung erhält vorübergehend Hostberechtigungen für den Ursprung des Hauptframes des Tabs.

„activeTab“ aufrufen

Die folgenden Nutzergesten aktivieren die Berechtigung "activeTab":