Macht aus dem monatlichen Report des Hornetsecurity Security Awareness Service (ZIP mit vier CSV-Dateien) ein übersichtliches, interaktives Dashboard. Es ist eine einzige HTML-Datei: Sie installieren nichts, alles läuft offline im Browser, und es verlassen keine Daten den Rechner.
English: A portable, offline, single-file HTML dashboard for the monthly statistics export of the Hornetsecurity Security Awareness Service. Drop the report ZIP onto the page — nothing is uploaded. The UI is in German.
Dashboard mit dem erfundenen Beispiel-Report aus test/sample.zip (dunkles Farbschema).
→ Neueste Version herunterladen:
Hornetsecurity-Report-Viewer.html aus dem Release speichern. Die SHA-256-Prüfsumme steht im
Release (SHA256SUMS.txt).
Hornetsecurity-Report-Viewer.htmldoppelklicken. Die Datei öffnet sich im Standard-Browser und kann beliebig kopiert werden, z. B. auf den Desktop oder ein Netzlaufwerk.- Die Report-ZIP aus der Hornetsecurity-Mail per Drag & Drop auf die Seite ziehen (oder klicken und die Datei auswählen). Die vier CSV-Dateien funktionieren auch einzeln.
- Dashboard prüfen. Mit „Drucken / PDF" lässt sich der Report archivieren.
Für einen neuen Monat ziehen Sie einfach die neue ZIP auf die bereits geöffnete Seite.
Zum Ausprobieren ohne eigenen Report eignet sich test/sample.zip, ein
vollständig erfundener Beispiel-Report.
| Bereich | Inhalt |
|---|---|
| KPI-Kacheln | ESI (Employee Security Index) mit Vormonats-Delta, simulierte / erfolgreiche / gemeldete Angriffe, Meldequote, riskante Interaktionen (Klicks, Logins, geöffnete Dateien, Makros), E-Training-Fortschritt |
| Diagramme | Angriffe und Meldungen je Mitarbeiter-Level, Mitarbeiter-Verteilung, E-Training-Status |
| Monats-Verlauf | ESI, Melde- und Erfolgsquote über die Monate (ab dem zweiten geladenen Report) |
| Tabellen | Psychologische Faktoren, Phishing-Szenarien, Gruppen (ab zwei Gruppen) und Mitarbeiter: sortierbar, durchsuchbar, filterbar; erfolgreiche Angriffe rot markiert |
| Darstellung | Hell/Dunkel (folgt dem System, umschaltbar), Druckansicht, farbfehlsichtigkeits-geprüfte Diagrammfarben |
Ein aktueller Browser: Microsoft Edge, Google Chrome, Mozilla Firefox oder Safari. Ohne Internetverbindung, ohne Server, ohne Administratorrechte.
- Die Auswertung läuft vollständig lokal im Browser. Die Seite lädt nichts nach und sendet nichts.
- Für den Monats-Verlauf speichert der Browser nur Kennzahlen (ESI, Quoten, Summen), keine
Namen oder E-Mail-Adressen, im
localStorage. Löschen über „Monats-Verlauf zurücksetzen" in der Fußzeile. - Report-Inhalte gelangen ausschließlich als Text in die Seite (
textContent), nie als HTML. Ein manipulierter Report kann deshalb keinen Code einschleusen.
Der Statistik-Export des Security Awareness Service, z. B. security_awareness_service_statistics.zip:
| Datei | Inhalt |
|---|---|
company_statistics.csv |
Firmen-Gesamtwerte (ESI, Angriffe, Level 1–5, E-Trainings) |
group_statistics.csv |
Dieselben Werte je Gruppe |
user_statistics.csv |
Werte je Mitarbeiter |
phishing_scenario_statistics.csv |
Werte je Phishing-Szenario |
Fehlt eine Datei, zeigt die Seite einen Hinweis und berechnet die Kennzahlen, soweit möglich, aus den Benutzerdaten. Als Datenstand gilt das Erstellungsdatum der ZIP-Einträge (meist Monatsanfang; die Daten betreffen dann den Vormonat).
Format-Eigenheiten, die der Viewer berücksichtigt: Listenfelder im Python-Stil
("['fear', 'time_pressure']"), Quoten als Dezimalzahl mit Punkt, UTF-8 ohne BOM
(Windows-1252 als Rückfallebene).
src/
├── core.js ZIP-Leser, DEFLATE (puff-Port als Fallback), CSV-Parser, Datenmodell (in Node testbar)
├── ui.js Rendering: KPI, SVG-Diagramme, Tabellen, Tooltips, Verlauf, Drag & Drop
└── template.html Gerüst und CSS (Farbsystem hell/dunkel, Druck-Styles)
test/
├── core.test.js Tests: Inflate-Fuzz gegen zlib, ZIP-/CSV-Grenzfälle, Datenmodell-Sollwerte
├── gates.test.js Tests der Doku-Gate-Regeln
├── make-sample.js Generator für den synthetischen Beispiel-Report (deterministisch)
└── sample.zip Synthetischer Beispiel-Report (nur erfundene Daten)
scripts/
├── check-data.js Daten-Gate: nur erlaubte Pfade, keine echten Reportdaten
├── check-docs.js Doku-Gate: Doku passt zum Code (PR-Check)
├── lint-md.js markdownlint-Lauf über alle Markdown-Dateien
└── lint-ps.ps1 PSScriptAnalyzer-Lauf über alle PowerShell-Skripte
build.ps1 setzt core.js + ui.js + Version ins Template ein → dist/Hornetsecurity-Report-Viewer.html
npm ci # Entwicklungswerkzeuge (Linter) installieren
npm run gate:data # Daten-Gate
npm run gate:docs # Doku-Gate
npm run check # Syntax-Prüfung
npm run lint # ESLint, markdownlint, PSScriptAnalyzer
npm test # Tests (müssen „0 fehlgeschlagen" melden)
.\build.ps1 # Build → dist/Hornetsecurity-Report-Viewer.htmlVoraussetzungen: Node.js ≥ 22.13 und PowerShell. npm-Pakete gibt es nur als Entwicklungswerkzeuge;
die ausgelieferte HTML-Datei hat keine Abhängigkeiten.
Die Version steht ausschließlich in package.json und wird beim Build in die Fußzeile übernommen.
Jeder Pull Request muss in der CI alle Checks bestehen, bevor er
nach main gemergt werden kann:
- Daten-Gate: Die eingecheckte Beispiel-ZIP muss byte-gleich aus dem Generator stammen.
Alle Dateien, auch die Inhalte der ZIP, dürfen nur E-Mail-Adressen erlaubter Domains
enthalten, und nur Pfade der Positivliste sind zulässig. Die
.gitignorearbeitet ebenfalls mit einer Positivliste. - Syntax-Prüfung aller Skripte.
- Test-Suite (ZIP/DEFLATE-Fuzzing, CSV-Parser, Datenmodell, Robustheit).
- Build und Build-Prüfung: Die HTML-Datei ist eigenständig (keine externen Skripte), und Version sowie Lizenzhinweis sind enthalten.
- Lint: ESLint für JavaScript, markdownlint für die Dokumentation, PSScriptAnalyzer für die PowerShell-Skripte.
- Doku-Gate: Produktänderungen brauchen einen CHANGELOG-Eintrag, Änderungen an Werkzeugen und Abläufen eine angepasste Entwickler-Doku. npm-Skripte, Links und CHANGELOG-Struktur werden auf Konsistenz geprüft.
- Abhängigkeiten prüfen: Neue oder geänderte Pakete und Actions dürfen keine bekannten Sicherheitslücken und keine GPL/AGPL-Lizenz mitbringen.
Dependabot hält npm-Pakete und Actions aktuell (wöchentlich, gebündelt, Sicherheitsupdates sofort). Details zu allen Checks stehen in CONTRIBUTING.md.
Releases baut der Release-Workflow aus einem Tag vX.Y.Z. Er
bricht ab, wenn Tag und package.json nicht übereinstimmen.
- ZIP-Dekompression nativ über
DecompressionStream('deflate-raw'), mit einer pure-JS-DEFLATE-Implementierung als Fallback (Port von zlib „puff", gegennode:zlibfuzz-getestet). - Diagramm-Rendering über
setTimeoutstattrequestAnimationFrame, damit es auch in Hintergrund-Tabs und eingebetteten Vorschauen zuverlässig zeichnet. window.PRVist ein Test-Hook für automatisierte Browser-Tests (loadFile,state,version).
Mehr dazu in CONTRIBUTING.md. Sicherheitsthemen: SECURITY.md.
© 2026 chrive-solutions e.U., veröffentlicht unter der PolyForm Shield License 1.0.0.
- Erlaubt: den Viewer kostenlos nutzen, privat und in der Firma, auch verändert für eigene Zwecke.
- Nicht erlaubt: ein Produkt anbieten, das mit dem Viewer konkurriert, also den Viewer oder eine veränderte Fassung verkaufen, weitergeben oder als Dienst anbieten, auch kostenlos. Dafür ist eine Vereinbarung mit chrive-solutions e.U. nötig.
Diese Kurzfassung ist unverbindlich; maßgeblich ist der englische Lizenztext in LICENSE. Die PolyForm Shield License ist keine Open-Source-Lizenz im Sinne der OSI: Der Quelltext ist offen einsehbar, die Weitergabe ist eingeschränkt. Version 1.0.0 wurde unter der MIT-Lizenz veröffentlicht und bleibt unter dieser Lizenz.
Kontakt: office@chrive-solutions.at · chrive-solutions.at
Unabhängiges Projekt, nicht mit der Hornetsecurity GmbH verbunden und nicht von ihr unterstützt. „Hornetsecurity" ist eine Marke ihres jeweiligen Inhabers und wird hier nur genannt, um das unterstützte Eingabeformat zu beschreiben.
