OpenNIT-Vault-Extension/docs/PERMISSIONS.md
Claude 07a5785580 Sechs Review-Punkte: Speicherort, Domain-Pruefung, Rechte, Generator, Notizen, Bearbeiten
1. Passwort mehrstufiger Logins nicht mehr auf der Platte: Der Auftrag lag
   als __pendingFill in chrome.storage.local, also im Klartext auf der
   Festplatte. Die 30-Sekunden-Pruefung verhinderte nur die Verwendung,
   nicht die Speicherung - wurde der zweite Schritt nie erreicht, blieb
   das Passwort liegen. Er liegt jetzt ausschliesslich im Speicher des
   Service Workers, je Tab, und wird beim Abholen verbraucht, nach 30 s
   verworfen, beim Sperren geleert und beim Schliessen des Tabs entfernt.
   Reste frueherer Versionen raeumt onInstalled ab.

2. Domain-Warnung: fillDomainMatches akzeptierte mit
   eh.endsWith('.' + pageHost) auch die Gegenrichtung - ein Eintrag fuer
   vpn.firma.de galt auf firma.de als passend und die Warnung blieb aus.
   Diese Klausel entfaellt.

3. scripting und activeTab werden nicht mehr angefordert; beide waren
   unbenutzt (das Content-Script laeuft ueber content_scripts, der
   Tab-Zugriff ueber host_permissions). PERMISSIONS.md begruendete
   scripting mit dem nativen Value-Setter, was nichts damit zu tun hat.

4. Passwort-Generator: buf lieferte dieselben Werte fuer Zeichenwahl und
   Mischreihenfolge, wodurch die Permutation mit dem Inhalt korrelierte.
   Beides zieht jetzt getrennt ueber randomBelow(), das den obersten,
   unvollstaendigen Block verwirft (gleichverteilt statt Rest-Modulo).
   Laenge (12-48) und Sonderzeichen sind waehlbar.

5. Notizen laufen ueber copySecret und werden damit ebenfalls aus der
   Zwischenablage entfernt; sie enthalten in der Praxis oft
   Wiederherstellungscodes. copyToClipboard entfaellt.

6. urlmatch.js buendelt die drei abweichenden matchUrl-Fassungen zu einer
   Regel, geladen in Service Worker, Popup und Seiten. escAttr escapt jetzt
   auch & < > und Apostroph, traegt also in jedem Attributkontext.
   Eintraege lassen sich im Popup bearbeiten und loeschen; beim Bearbeiten
   bedeutet ein leeres Passwortfeld unveraendert, sodass das Passwort das
   Popup nicht verlaesst.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G12DRMpe4UjYDwuRU1sjy1
2026-07-31 15:55:37 +02:00

2.6 KiB
Raw Permalink Blame History

Berechtigungen Begründung

Diese Übersicht erklärt jede angeforderte Berechtigung (auch für die Chrome-Web-Store-Prüfung).

host_permissions: ["<all_urls>"]

Warum: Ein Passwort-Manager muss Login-Felder auf beliebigen Websites erkennen und auf Wunsch ausfüllen können. Deshalb ist Zugriff auf alle URLs erforderlich.

Was NICHT passiert: Es werden keine Seiteninhalte gelesen, gespeichert oder übertragen ausschließlich Formularfelder (Benutzer/Passwort/OTP) werden erkannt und beim Ausfüllen beschrieben. Diese verlassen den Browser nicht. Es findet kein Tracking und keine Analyse statt.

content_scripts (matches <all_urls>, run_at: document_idle)

Warum: Das In-Seite-Dropdown mit Vorschlägen und die Felderkennung laufen als Content-Script. Notwendig für Autofill und die 2FA-Erkennung (inkl. Shadow-DOM und mehrstufiger Logins).

storage

Warum: Lokale Speicherung von Server-URL, Zugriffstoken (per SSO) und Einstellungen; Entsperr-Status in storage.session.

alarms

Warum: Zeitgesteuertes Leeren der Zwischenablage (~30 s) sowie periodisches Verwerfen des Einträge-Caches (5 Min).

offscreen

Warum: In Manifest V3 hat der Service Worker keinen DOM-Zugriff. Zum programmatischen Leeren der Zwischenablage wird ein kurzlebiges Offscreen-Dokument (Reason CLIPBOARD) genutzt sowohl zum Bereitlegen eines 2FA-Codes als auch zum anschließenden Leeren.

identity

Warum: Für die SSO-Anmeldung (chrome.identity.launchWebAuthFlow, OAuth 2.0 + PKCE). Öffnet die OpenNIT-Login-Seite und empfängt die Weiterleitung an https://<extension-id>.chromiumapp.org/. Es wird kein Zugriff auf Google-Konten o. Ä. genommen nur der Web-Auth-Flow zur konfigurierten OpenNIT-Instanz.

Bewusst NICHT angefordert

  • scripting / activeTab nicht nötig: Das Content-Script wird über content_scripts geladen, das Ausfüllen aus dem Popup läuft über eine Nachricht an das bereits laufende Script. Der Zugriff auf den aktiven Tab ist bereits durch host_permissions abgedeckt.

  • tabs entfällt: Die aktive Tab-Adresse ist bereits über host_permissions verfügbar. Dadurch erscheint keine „Browserverlauf lesen"-Warnung.

  • Keine cookies, history, webRequest, downloads, notifications o. Ä.

Single-Purpose-Erklärung (für den Store)

OpenNIT Vault dient einem einzigen Zweck: dem Verwalten und automatischen Ausfüllen von Zugangsdaten und 2FA-Codes aus einer selbst gehosteten OpenNIT-Instanz. Alle Berechtigungen dienen ausschließlich diesem Zweck.