From 074635c03738d89378ac03af96c88a54ac7e98e5 Mon Sep 17 00:00:00 2001 From: Ferdinand Urban Date: Wed, 3 Jun 2026 12:40:58 +0000 Subject: [PATCH] docs(security): document localStorage privacy + note ID fallback (#8) - README gains a "Datenschutz & Speicherung" section: local single-user tool, unencrypted localStorage, avoid shared devices, export JSON to back up. - Comments the generateId Math.random fallback as a non-crypto last resort, acceptable for local employee ids. Co-Authored-By: Claude Opus 4.8 --- README.md | 12 ++++++++++++ js/data.js | 2 ++ 2 files changed, 14 insertions(+) diff --git a/README.md b/README.md index 92c6da5..3b3f42f 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,15 @@ Die App läuft auf **http://localhost:3001**. ```bash npm test ``` + +## Datenschutz & Speicherung + +Diese App ist ein **lokales Single-User-Werkzeug**: Alle Daten (Mitarbeiternamen, +Urlaube, Pläne, Verlauf) werden ausschließlich **im Browser** (`localStorage`) +gespeichert. Es gibt keinen Server und keine Übertragung an Dritte. Die Daten +liegen **unverschlüsselt** vor und sind für jeden zugänglich, der Zugriff auf +dasselbe Browser-Profil hat. + +- App **nicht auf geteilten/öffentlichen Geräten** für sensible Daten nutzen. +- Datenstand regelmäßig über **JSON-Export** (Tab „Daten") sichern. +- Beim Leeren der Browserdaten gehen alle nicht exportierten Daten verloren. diff --git a/js/data.js b/js/data.js index 772676c..af47ae6 100644 --- a/js/data.js +++ b/js/data.js @@ -10,6 +10,8 @@ function generateId() { const h = [...b].map(x => x.toString(16).padStart(2, '0')); return `${h.slice(0,4).join('')}-${h.slice(4,6).join('')}-${h.slice(6,8).join('')}-${h.slice(8,10).join('')}-${h.slice(10,16).join('')}`; } + // Last-resort fallback for environments without Web Crypto. Not cryptographically + // strong, but adequate for local, non-security-sensitive employee ids. return Date.now().toString(36) + Math.random().toString(36).slice(2, 10); }