Was eine Browsererweiterung ist
Eine Erweiterung ist ein Paket aus Webcode, das der Browser mit zusätzlichen Rechten ausführt. Sie kann eine Schaltfläche in die Symbolleiste setzen, die geöffneten Seiten lesen und verändern oder im Hintergrund auf ein Ereignis warten. Typische Aufgaben:
- Werbung und Tracker auf jeder Seite blockieren;
- gespeicherte Anmeldedaten aus einem Passwortmanager eintragen;
- die gerade geöffnete Seite übersetzen;
- Screenshots aufnehmen oder die Schritte einer Aufgabe als Anleitung aufzeichnen.
Der Unterschied zu einer Website ist die Reichweite. Eine Website sieht nur ihren eigenen Tab. Eine Erweiterung kann Zugriff über Tabs und Websites hinweg bekommen, und deshalb lohnt es sich, ihre Berechtigungen zu lesen, bevor man auf „Hinzufügen“ klickt.
Erweiterung oder Plug-in
Die Wörter werden oft gleich verwendet, aber ein Plug-in war etwas anderes: nativer Code wie Flash, geladen über die alte NPAPI-Schnittstelle. Chrome und Firefox führen so etwas nicht mehr aus. Was Sie heute aus einem Store installieren, ist eine Erweiterung.
Das Prinzip ist nicht neu. Chrome begann 2009, Erweiterungen zu testen, Firefox stellte 2017 auf dasselbe WebExtensions-Format um, und Safari auf dem Mac unterstützt seit 2020 Erweiterungen, die für die Chrome-Schnittstelle geschrieben sind, laut dem Wikipedia-Artikel über Browsererweiterungen.
Woraus eine Erweiterung besteht
- manifest.json
- Die Erklärung, die Chrome liest, bevor irgendetwas läuft: Name, Version, Berechtigungen und welche Datei was tut. Alles Weitere in dieser Liste ist darin eingetragen.
- Service Worker
- Das Hintergrundskript. Es hat keine eigene Seite, wird durch Ereignisse geweckt (ein Klick auf das Symbol, eine Nachricht, ein Timer) und bei Leerlauf beendet.
- Popup und Einstellungsseite
- Gewöhnliche HTML-Seiten, die zur Erweiterung gehören: das Feld unter dem Symbol in der Symbolleiste und die Einstellungsseite.
- Content Scripts
- JavaScript, das in einer Webseite läuft und lesen und ändern kann, was darauf steht. Es wird entweder im Manifest für passende Websites angemeldet oder bei Bedarf über die Scripting-Schnittstelle eingefügt, wie Chromes Leitfaden zu Content Scripts beschreibt.
- Speicher
- Einstellungen und Daten, die der Browser auf Ihrem Rechner ablegt, über
chrome.storageoder IndexedDB.
Was Manifest V3 ist
Manifest V3 ist die aktuelle Version des Manifest-Formats und der Regeln, die dazugehören. Laut Chromes Überblick über Manifest V3 sind die wichtigsten Änderungen:
- Ein Service Worker, der bei Leerlauf beendet wird, ersetzt die Hintergrundseite, die dauerhaft lief;
- Eine Erweiterung darf keinen Code mehr von einem Server nachladen: Alles, was sie ausführt, steckt in dem Paket, das der Store geprüft hat;
- Werbeblocker und ähnliche Werkzeuge filtern Anfragen mit Regeln, die sie dem Browser vorab mitteilen (
declarativeNetRequest), statt jede Anfrage im eigenen Code abzufangen.
Das alte Format wurde schrittweise abgeschaltet, laut Chromes Zeitplan für Manifest V2:
| Wann | Was sich geändert hat |
|---|---|
| Januar 2022 | Der Chrome Web Store nimmt keine neuen öffentlichen Manifest-V2-Erweiterungen mehr an |
| 31. März 2025 | Manifest-V2-Erweiterungen sind für alle Nutzer standardmäßig deaktiviert, lassen sich aber wieder einschalten |
| 24. Juli 2025 | Mit Chrome 138 bleiben sie deaktiviert; Nutzer können sie nicht mehr einschalten |
| 31. August 2026 | Die verbliebenen Manifest-V2-Erweiterungen werden aus dem Chrome Web Store entfernt |
Für Leserinnen und Leser heißt das: Jede Erweiterung, die sich heute aus dem Chrome Web Store installieren lässt, ist eine Manifest-V3-Erweiterung. Die Umstellung war umstritten: Die Electronic Frontier Foundation und andere Kritiker hielten ihr vor, dass sie die Möglichkeiten von Werbeblockern einschränkt, wie Wikipedia festhält. Manifest V3 macht eine Erweiterung nicht sicher; was sie erreichen kann, entscheiden weiterhin ihre Berechtigungen.
Ein echtes Manifest, Zeile für Zeile
Das ist das Manifest einer Erweiterung zum Aufzeichnen von Schritten, Version 1.4.0. Sie zeichnet eine Aufgabe im Browser als nummerierte Schritte mit Screenshots auf.
1 {
2 "manifest_version": 3,
3 "name": "__MSG_extName__",
4 "short_name": "stepkeep",
5 "version": "1.4.0",
6 "description": "__MSG_extDescription__",
7 "default_locale": "en",
8 "minimum_chrome_version": "116",
9 "permissions": ["activeTab", "tabs", "storage", "scripting", "downloads"],
10 "optional_host_permissions": ["*://*/*"],
11 "storage": {
12 "managed_schema": "managed_schema.json"
13 },
14 "options_ui": {
15 "page": "src/options/options.html",
16 "open_in_tab": true
17 },
18 "background": {
19 "service_worker": "src/background/sw.js",
20 "type": "module"
21 },
22 "action": {
23 "default_title": "__MSG_actionTitle__",
24 "default_popup": "src/popup/popup.html",
25 "default_icon": { "16": "icons/icon16.png", "128": "icons/icon128.png" }
26 },
27 "icons": { "16": "icons/icon16.png", "128": "icons/icon128.png" }
28 }
Die Zeilen 1 bis 8 sind die Identität: Formatversion 3, der Name (je Sprache aus einer Textdatei eingesetzt), die Version und die älteste Chrome-Version, auf der sie läuft. Die Zeilen 14 bis 27 nennen die Einstellungsseite, den Service Worker und das Popup. Die Symbollisten sind hier auf zwei Größen gekürzt. Was die Erweiterung erreichen kann, entscheiden die Zeilen 9 bis 12. Die Warnungen stammen aus Chromes Berechtigungsliste; Chrome zeigt sie auf Deutsch in eigener Übersetzung:
| Berechtigung | Was sie erlaubt | Warnung in Chrome | Warum diese Erweiterung fragt |
|---|---|---|---|
activeTab |
Zugriff auf den aktuellen Tab, erst nachdem der Nutzer die Erweiterung anklickt | Keine | Um den Screenshot des aufgezeichneten Tabs aufzunehmen |
tabs |
Adresse und Titel der offenen Tabs | „Read your browsing history“ (Browserverlauf lesen) | Um zu wissen, welcher Tab aufgezeichnet wird und auf welcher Seite jeder Schritt passiert |
storage |
Daten im Browser speichern, auf dem Rechner | Keine | Einstellungen und der Lizenzeintrag |
scripting |
Ein Skript in einer Seite ausführen, auf die die Erweiterung schon Zugriff hat | Keine | Um den Aufzeichner beim Start der Aufnahme in die Seite einzufügen |
downloads |
Dateien in den Download-Ordner speichern | „Manage your downloads“ (Downloads verwalten) | Um die exportierte PDF-, HTML- oder ZIP-Datei zu speichern |
optional_host_permissions |
Nichts bei der Installation; später darf die Erweiterung Websites nach diesem Muster anfragen: *://*/* |
Keine bei der Installation; eine Abfrage, die eine Website nennt, wenn sie anfragt | Beim Start einer Aufnahme fragt Chrome nach genau dieser Website, und man kann ablehnen |
storage.managed_schema |
Einstellungen, die ein Administrator per Richtlinie setzen kann | Keine | Damit die IT Optionen für ein Team vorgeben kann |
activeTab zeigt keine Warnung, weil es nur vorübergehend Zugriff auf die Website gibt, auf der der Nutzer gerade ist, in dem Moment, in dem er die Erweiterung aufruft, wie Chromes Leitfaden zu activeTab erklärt. Optionale Hostberechtigungen werden angefragt, während die Erweiterung läuft, mit chrome.permissions.request, laut der Referenz zur Permissions-Schnittstelle. Das Muster *://*/* sagt, welche Websites die Erweiterung anfragen darf, nicht, auf welche sie Zugriff hat. Wie ein Administrator eine Erweiterung für ein ganzes Unternehmen erlaubt oder sperrt, ist ein eigenes Thema, behandelt in Prozessdokumentation und Datenschutz.
Was im Manifest fehlt
- Keine
host_permissions. Pflicht-Hostzugriff wird bei der Installation erteilt. Eine Erweiterung, die dort alle Websites verlangt, zeigt schon vor dem Hinzufügen die Warnung „Alle Ihre Daten auf allen Websites lesen und ändern“. - Kein
content_scripts-Block. Angemeldete Content Scripts laufen auf jeder passenden Seite, die Sie öffnen. Ohne diesen Block läuft von dieser Erweiterung nichts in einer Seite, bis es eingefügt wird, hier erst beim Start einer Aufnahme. - Kein
webRequest. Sie kann die Anfragen des Browsers weder beobachten noch verändern.
Kann eine Erweiterung Passwörter sehen
Eine Erweiterung kann ein Passwort auf einer Seite sehen, auf die sie Zugriff hat, aber keine Schnittstelle für Erweiterungen gibt ihr die Liste der Passwörter, die Chrome gespeichert hat. Ein Content Script läuft in der Seite selbst. Es kann also ein ausgefülltes Passwortfeld lesen und jede Taste, die in der Seite gedrückt wird, genau wie der eigene Code der Seite. Das Risiko ist die Seite, nicht der Passwortspeicher.
Die Frage an eine Erweiterung lautet also: Auf welche Websites hat sie Zugriff?
- „Alle Ihre Daten auf allen Websites lesen und ändern“: Sie kann in jeder Seite, die Sie öffnen, ein Skript ausführen, auch bei Ihrer Bank und in Ihrem Postfach.
- Bei Klick: Sie bekommt eine Seite erst, wenn Sie in diesem Tab auf die Erweiterung klicken.
- Eine bestimmte Website: Sie erreicht diese Website und keine andere.
Was eine Erweiterung mit diesem Zugriff macht, entscheidet ihr eigener Code. Der Aufzeichner oben speichert zum Beispiel, welches Element angeklickt oder ausgefüllt wurde, und dessen Beschriftung, nicht den eingetippten Text, und hält Seitenadressen als Herkunft plus Pfad fest, ohne Abfrageteil. Sein Screenshot zeigt ein Feld so, wie die Seite es darstellt; ein Passwortfeld erscheint also als Punkte. So ist der Code dieser einen Erweiterung geschrieben, es ist keine Regel für Erweiterungen allgemein.
Eine Erweiterung selbst prüfen
- Berechtigungen und Websitezugriff lesen. Öffnen Sie
chrome://extensionsund klicken Sie bei der Erweiterung auf „Details“. Dort stehen ihre Berechtigungen, und „Websitezugriff“ bietet „Bei Klick“, „Auf bestimmten Websites“ und „Auf allen Websites“. Stellen Sie die engste Stufe ein, mit der die Erweiterung noch funktioniert. - Das Manifest lesen. Jede installierte Erweiterung liegt im Chrome-Profilordner unter
Extensions/<id>/<version>/manifest.json; die 32 Buchstaben lange ID steht auf der Detailseite, undchrome://versionzeigt den Profilpfad. Üblich sind%LOCALAPPDATA%\Google\Chrome\User Data\Default\Extensionsunter Windows,~/Library/Application Support/Google/Chrome/Default/Extensionsunter macOS und~/.config/google-chrome/Default/Extensionsunter Linux. Auf einem Chromebook ist der Profilordner in der Dateien-App nicht erreichbar, dort ist die Detailseite die Prüfung. - Beobachten, was sie sendet. Schalten Sie auf
chrome://extensionsden Entwicklermodus ein und klicken Sie bei der Erweiterung unter „Ansichten überprüfen“ auf „Service Worker“. Wählen Sie im DevTools-Fenster den Tab „Netzwerk“ und erledigen Sie mit der Erweiterung ihre eigentliche Aufgabe. Jede Anfrage, die sie im Hintergrund stellt, erscheint in der Liste; eine Erweiterung ohne Anfragen lässt sie leer. Popup und andere Seiten der Erweiterung haben eigene DevTools und brauchen denselben Blick.
Entfernen Sie danach die Erweiterungen, die Sie nicht mehr nutzen. Eine vergessene Erweiterung hat weiterhin den Zugriff, den Sie ihr gegeben haben.
Ein Schrittaufzeichner, der diese Prüfungen besteht
Wer eine Aufgabe in einer Web-App dokumentiert, landet mit diesen Prüfungen bei einem Aufzeichner, der jede Website einzeln anfragt und nichts sendet: Das Netzwerk-Panel bleibt beim Aufnehmen und Exportieren leer.
Quellen
Alle Seiten geprüft am .
- Wikipedia (englisch): Browser extension. Chrome-Erweiterungen seit 2009, Firefox WebExtensions 2017, Safari 2020; die Kritik der EFF und anderer an Manifest V3.
- Chrome for Developers: Content scripts. Content Scripts lesen und ändern die Seite; im Manifest angemeldet oder bei Bedarf eingefügt.
- Chrome for Developers: What is Manifest V3. Service Worker, kein nachgeladener Code, declarativeNetRequest.
- Chrome for Developers: Manifest V2 support timeline. Die Daten der Abschaltung von Manifest V2.
- Chrome for Developers: Permissions list. Was jede Berechtigung erlaubt und welche Warnung sie zeigt.
- Chrome for Developers: The activeTab permission. Vorübergehender Zugriff auf den aktuellen Tab nach einer Nutzeraktion, ohne Warnung.
- Chrome for Developers: chrome.permissions. Optionale Berechtigungen, zur Laufzeit angefragt.
- Paws Off (englisch): Chrome extension all-sites permission explained. host_permissions für alle Websites und die Warnung, die Chrome dafür bei der Installation zeigt.