feat(cookie): Finding 'vague_duration' — unkonkrete Speicherdauer

Flaggt Laufzeit-Angaben ohne konkrete Dauer/Kriterium ('dauerhaft', 'bis zur
Loeschung', 'bis Nutzer deaktiviert', 'unbegrenzt' …) — Art. 5(1)(e) + Art. 13
DSGVO. Library-unabhaengig, gilt fuer ALLE Cookies (Coverage auf BMWs 780).
'13 Monate'/'Session'/'bis Widerruf, max. X' bleiben ok.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-06-11 08:33:06 +02:00
parent d18ef79f18
commit 4c45f11e43
3 changed files with 58 additions and 0 deletions
@@ -79,6 +79,24 @@ def test_excessive_lifetime():
assert el and "Art. 5" in el[0]["remediation"]
def test_vague_duration_flagged_concrete_ok():
# User-Beispiel Salesforce: "bis der Nutzer es deaktiviert" = vage.
out = analyze_cookies([{
"name": "Salesforce", "category": "necessary",
"cookies": [
{"name": "MUTEX_X", "purpose": "x",
"expiry": "Wird solange gespeichert, bis es durch den Nutzer in seinem Browser deaktiviert wird."},
{"name": "ok1", "purpose": "x", "expiry": "13 Monate"},
{"name": "sess", "purpose": "x",
"expiry": "Dieses Session Cookie wird beim Schließen des Browsers wieder gelöscht."},
],
}])
vd = [f for f in out["findings"] if f["type"] == "vague_duration"]
assert len(vd) == 1 # nur MUTEX_X; 13 Monate + Session ok
assert vd[0]["cookie"] == "MUTEX_X"
assert "Art. 5" in vd[0]["remediation"]
def test_big_library_covers_cookie_not_in_rich_db():
# Cookie nicht in der 35er rich-DB, aber in der grossen 2287er (big_lib).
big = {"bmw_track_de": {