603381a67f
CI / nodejs-build (push) Has been skipped
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Successful in 38s
CI / test-python-document-crawler (push) Has been skipped
CI / detect-changes (push) Successful in 12s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / validate-canonical-controls (push) Successful in 14s
CI / loc-budget (push) Failing after 15s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
P58 Anti-Audit-Detection robuster (script-domain + settings-spezifisch —
war bereits im Code, jetzt sauber als completed dokumentiert).
P59c DACH-Custom-Cookies in compliance.cookie_library: Borlabs,
etracker, Matomo/Piwik, Userlike, Cookiebot/Cookieyes/Usercentrics,
Akamai/Cloudflare/Datadome Bot-Manager + HubSpot. 21 neue Eintraege
(3 von 24 schon via Open-Cookie-Database vorhanden).
Script: backend-compliance/scripts/seed_dach_cookies.py.
P60b Vendor-Pattern-Dedupe mit Fuzzy-Match (Jaccard >= 0.7) statt exakter
Tuple-Equality. Vendors mit teilweise befuellten Feldern (z.B.
Sitzland eingetragen) fallen nicht mehr aus der globalen Notice —
Bug: Amazon/Psyma/Qualtrics hatten zuvor wiederholte per-row Actions.
P61 "Untergeschobene Cookies"-Erkennung — wenn ein deklarierter Vendor
(z.B. Google Tag Manager) automatisch weitere mitbringt (GA + GCL_AU
+ DoubleClick), werden diese als separater Mail-Block (gelb) mit
COOKIE/VENDOR-Badges + Quellen-Doku ausgewiesen. Neuer Service:
compliance.services.vendor_package_cookies (8 Primary-Vendors mit
je 2-4 implicit Cookies/Vendors).
P62 Marketing-Manager-Disclaimer "Was wir sehen / nicht sehen" als
blauer Box-Block direkt unter dem Critical-Findings-Block. Erklaert
Grenzen unseres Audits (Server-Side-Tracking, Vendor-interne
Datenweitergabe, Cross-Page-Banner) und Risiko des Falschvertrauens
in einen 100%-Score. Neuer Renderer: compliance.api.scope_disclaimer.
Architektur: VVT-Tabellen-Renderer aus agent_doc_check_extras.py (552
LOC -> 242 LOC) in compliance.api.vvt_table_renderer ausgelagert, um den
500-LOC-Hardcap einzuhalten.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
98 lines
4.3 KiB
Python
98 lines
4.3 KiB
Python
"""
|
|
P62 — Marketing-Manager-freundlicher Scope-Disclaimer ("Was wir sehen / nicht sehen").
|
|
|
|
Erklaert in 30 Sekunden was unser Audit tatsaechlich pruefen kann und wo
|
|
die Grenzen sind. Ziel: vermeidet falsches Vertrauen in einen 100%-Score
|
|
und macht klar, wo Marketing/IT zusaetzlich pruefen muss.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
def build_scope_disclaimer_html() -> str:
|
|
"""Render: was wir sehen + was wir NICHT sehen koennen."""
|
|
return (
|
|
'<div style="font-family:-apple-system,BlinkMacSystemFont,sans-serif;'
|
|
'max-width:700px;margin:8px auto 16px;padding:14px 18px;'
|
|
'background:#f0f9ff;border:1px solid #bfdbfe;border-radius:8px">'
|
|
'<h3 style="margin:0 0 8px;font-size:13px;color:#1e40af">'
|
|
'Was diese Pruefung leistet — und wo ihre Grenzen liegen</h3>'
|
|
|
|
'<div style="font-size:11px;color:#1e293b;margin-bottom:10px">'
|
|
'Wir sind ein <strong>technisches Audit-Tool</strong>, kein Anwalt. '
|
|
'Ein 100%-Score bedeutet nicht "rechtssicher" — er bedeutet "alle '
|
|
'Pruefkriterien automatisch erfuellt". Folgendes koennen wir vs. '
|
|
'koennen wir nicht:</div>'
|
|
|
|
'<table style="width:100%;border-collapse:collapse;font-size:11px;'
|
|
'margin-bottom:8px">'
|
|
'<thead><tr style="background:#dbeafe;color:#1e40af;text-align:left">'
|
|
'<th style="padding:5px 8px;width:50%">Was wir sehen</th>'
|
|
'<th style="padding:5px 8px;width:50%">Was wir NICHT sehen</th>'
|
|
'</tr></thead>'
|
|
'<tbody>'
|
|
|
|
'<tr style="border-top:1px solid #bfdbfe">'
|
|
'<td style="padding:5px 8px;color:#1e293b">'
|
|
'✓ Cookies/Storage im Browser nach Klick auf Akzeptieren/Ablehnen'
|
|
'</td>'
|
|
'<td style="padding:5px 8px;color:#475569">'
|
|
'✗ Server-seitiges Tracking (Meta Conversion API, GA4 Measurement '
|
|
'Protocol — der Browser sieht nichts davon)'
|
|
'</td></tr>'
|
|
|
|
'<tr style="border-top:1px solid #bfdbfe">'
|
|
'<td style="padding:5px 8px;color:#1e293b">'
|
|
'✓ Vendor-Listen aus dem Banner (TCF, CMP-Settings, Phase-G Klick-Tour)'
|
|
'</td>'
|
|
'<td style="padding:5px 8px;color:#475569">'
|
|
'✗ Wer die Daten beim Vendor tatsaechlich erhaelt / weiterleitet '
|
|
'(z.B. Google verteilt intern an Ads/Marketing-Plattform)'
|
|
'</td></tr>'
|
|
|
|
'<tr style="border-top:1px solid #bfdbfe">'
|
|
'<td style="padding:5px 8px;color:#1e293b">'
|
|
'✓ Texte und Pflichtangaben in DSE/Cookie-Richtlinie/Impressum'
|
|
'</td>'
|
|
'<td style="padding:5px 8px;color:#475569">'
|
|
'✗ Ob die internen Prozesse (Loeschkonzept, AVV-Pflege, '
|
|
'Mitarbeiter-Schulungen) tatsaechlich gelebt werden'
|
|
'</td></tr>'
|
|
|
|
'<tr style="border-top:1px solid #bfdbfe">'
|
|
'<td style="padding:5px 8px;color:#1e293b">'
|
|
'✓ Banner-UI-Verstoesse (Dark Patterns, ungleichgewichtige Buttons, '
|
|
'fehlender Reject-Mechanismus)'
|
|
'</td>'
|
|
'<td style="padding:5px 8px;color:#475569">'
|
|
'✗ Ob das Banner auf <em>jeder</em> Unterseite identisch ist '
|
|
'(wir messen die Einstiegsseite)'
|
|
'</td></tr>'
|
|
|
|
'<tr style="border-top:1px solid #bfdbfe">'
|
|
'<td style="padding:5px 8px;color:#1e293b">'
|
|
'✓ Untergeschobene Cookies (z.B. Google Tag Manager bringt automatisch '
|
|
'GA + Ads — siehe P61-Block unten)'
|
|
'</td>'
|
|
'<td style="padding:5px 8px;color:#475569">'
|
|
'✗ Drittland-Transfer auf Vertragsebene — ob ein SCC/DPF wirklich '
|
|
'vorliegt, koennen nur Sie selbst pruefen'
|
|
'</td></tr>'
|
|
|
|
'</tbody></table>'
|
|
|
|
'<div style="font-size:10px;color:#475569;margin-top:8px;'
|
|
'padding-top:6px;border-top:1px dashed #bfdbfe">'
|
|
'<strong>Hinweis fuer Marketing & Geschaeftsfuehrung:</strong> '
|
|
'Selbst wenn dieser Bericht keinen Verstoss findet, kann ein '
|
|
'individueller Bescheid einer Aufsichtsbehoerde oder eine Klage '
|
|
'(NOYB, Verbraucherschutz, Sammelklage) zu einem anderen Ergebnis '
|
|
'kommen — etwa wenn beim Vendor selbst (Server-Side) personenbezogene '
|
|
'Daten verarbeitet werden, die wir browser-seitig nicht sehen. '
|
|
'Dieser Bericht ersetzt keine anwaltliche Pruefung, hilft aber, '
|
|
'<strong>technisch belegbare Verstoesse</strong> sofort zu schliessen.'
|
|
'</div>'
|
|
|
|
'</div>'
|
|
)
|