E-Rechnung OK

Transparenz: Ihre Rechnung verlässt Ihr Gerät nicht

Zuletzt aktualisiert: 26.10.2026

Der XRechnung-Validator liest Ihre Datei mit der Browser-Schnittstelle FileReader ein (eingefügten XML-Text übernimmt er direkt) und prüft sie mit JavaScript direkt auf Ihrem Gerät. Die Rechnung wird an keinen Server gesendet, auch nicht an unseren. Sie müssen uns das nicht glauben: Auf dieser Seite steht, wie Sie es mit wenigen Klicks selbst nachprüfen.

1. Netzwerkverkehr in den Entwicklertools ansehen

Chrome, Edge und Firefox zeigen in ihren Entwicklertools jede Anfrage an, die eine Seite stellt. So gehen Sie vor:

  1. Öffnen Sie den Validator.
  2. Öffnen Sie die Entwicklertools mit F12 bzw. auf dem Mac mit Cmd + Option + I.
  3. Öffnen Sie den Reiter „Netzwerk“ (in Firefox „Netzwerkanalyse“, in englischer Oberfläche „Network“).
  4. Laden Sie die Seite neu. Die Liste zeigt jetzt alle Dateien, die der Browser geladen hat – ausschließlich von unserer eigenen Domain (siehe Abschnitt 3).
  5. Prüfen Sie nun eine Rechnung. Bei der ersten Prüfung lädt der Browser die Prüfregeln der KoSIT und die Prüfbibliotheken von unserer Domain nach (Abschnitt 3). Ihre Rechnung ist in keiner Anfrage enthalten. Prüfen Sie danach eine Rechnung in derselben Syntax (UBL oder CII), kommt kein neuer Eintrag hinzu.

Ohne Entwicklertools geht es so: Prüfen Sie im Validator eine beliebige Rechnung, damit die Prüfregeln geladen sind. Trennen Sie dann Ihr Gerät vom Internet (WLAN aus oder Flugmodus) und prüfen Sie eine weitere Rechnung in derselben Syntax (UBL oder CII). Schnellprüfung und vollständige Prüfung laufen weiter, weil sie keine Verbindung benötigen.

2. Was die Content-Security-Policy bewirkt

Jede Seite von E-Rechnung OK enthält im Kopfbereich eine Content-Security-Policy (CSP). Damit legt die Seite fest, welche Quellen der Browser laden und welche Verbindungen er aufbauen darf. Unsere Richtlinie lautet:

default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:;
connect-src 'none'; font-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'

Die Richtlinie sehen Sie in den Entwicklertools im Reiter „Elemente“ (Firefox: „Inspektor“) im <head> der Seite als <meta http-equiv="Content-Security-Policy">. Verstößt eine Anfrage gegen die Richtlinie, blockiert der Browser sie und meldet das in der Konsole.

Die vollständige KoSIT-Prüfung läuft in einem eigenen Hintergrundprozess des Browsers (Web Worker). Für ihn gilt nicht die Richtlinie der Seite, sondern eine eigene, die unser Server mit der Datei src/kosit-worker.js als HTTP-Header sendet:

default-src 'none'; script-src 'self' 'wasm-unsafe-eval'; connect-src 'none';
base-uri 'none'; form-action 'none'

Auch hier verbietet connect-src 'none' jede Verbindung. 'wasm-unsafe-eval' erlaubt nur, WebAssembly-Code zu kompilieren. Das benötigt die Schemaprüfung, für die wir libxml2 als WebAssembly-Modul einsetzen. JavaScript aus Zeichenketten auszuführen (eval, new Function), bleibt verboten. Fehlt dieser Header, startet die vollständige Prüfung nicht. Den Header sehen Sie im Reiter „Netzwerk“, wenn Sie dort die Anfrage kosit-worker.js anklicken (Abschnitt „Antwortheader“).

3. Welche Dateien die Seite lädt

Beim Aufruf lädt der Validator bis zu elf Dateien, alle von unserer eigenen Domain:

Erst wenn Sie eine Rechnung prüfen, lädt er die Dateien der vollständigen KoSIT-Prüfung nach, ebenfalls von unserer Domain. Von den Prüfregeln nur die für die erkannte Syntax (UBL oder CII):

Versionen und Lizenzen der Bibliotheken und Regelwerke nennt die Seite Lizenzen.

Die Bilddatei ist das Bildschirmfoto im Abschnitt „So funktioniert die Prüfung“. Der Browser lädt sie erst, wenn Sie in die Nähe scrollen; auf schmalen Bildschirmen stattdessen die zugeschnittene Fassung assets/img/xrechnung-validator-pruefergebnis-mobil.webp. Klicken Sie auf „Mit Beispielrechnung testen“ oder „Fehlerhaftes Beispiel prüfen“, lädt die Seite zusätzlich die Beispielrechnungen (src/beispiele.js). Die Download-Links laden die Dateien aus beispiele/. Alle diese Dateien kommen von unserer Domain.

Wählen Sie eine PDF-Datei (ZUGFeRD oder Factur-X), lädt die Seite vor der Prüfung zusätzlich src/core/pdf-attachments.js. Dieses Skript liest die eingebettete XML-Datei im Arbeitsspeicher Ihres Browsers aus der PDF-Datei aus. Die Seite ZUGFeRD Validator lädt dieselben Dateien wie die Startseite, dazu ihre eigenen Bildschirmfotos (assets/img/zugferd-validator-pruefergebnis*.webp). „Mit Beispiel-PDF testen“ lädt src/beispiele.js, der Download-Link die Datei beispiele/zugferd-beispiel.pdf.

Der Leitweg-ID-Prüfer lädt weder src/app.js noch die Prüfregeln für Rechnungen, sondern nur src/leitweg-app.js, src/core/identifiers.js und src/ui/sidebar.js, dazu Stylesheet, Komponenten, Logo und sein Bildschirmfoto (assets/img/leitweg-id-pruefen-ergebnis.webp). Die eingegebene Leitweg-ID wird nur im Arbeitsspeicher des Browsers geprüft und nicht gespeichert.

Manche Browser fragen zusätzlich von sich aus nach einem Seitensymbol (favicon.ico), ebenfalls bei unserer Domain. Die Skripte sind nicht verschleiert: Sie können jede Datei im Reiter „Quellen“ (Firefox: „Debugger“) lesen.

4. Grenzen