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 <noreply@anthropic.com>
This commit is contained in:
1 parent
e6452fa102
commit
074635c037
2 files changed
+14
No files matched your search
@@ -25,3 +25,15 @@ Die App läuft auf **http://localhost:3001**.
|
|||||||
```bash
|
```bash
|
||||||
npm test
|
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.
|
||||||
@@ -10,6 +10,8 @@ function generateId() {
|
|||||||
const h = [...b].map(x => x.toString(16).padStart(2, '0'));
|
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('')}`;
|
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);
|
return Date.now().toString(36) + Math.random().toString(36).slice(2, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user