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 sieben 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.

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