@aegis-scan/skills 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ATTRIBUTION.md +93 -0
- package/package.json +1 -1
- package/sbom.cdx.json +1 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +878 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/HANDOVER-LO-LIVE-VERIFICATION-2026-05-15.md +187 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/README.md +9 -3
- package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +93 -14
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/audit.md +193 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/avv-redline.md +246 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/az-verify.md +155 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/cold-start.md +157 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/dsar-respond.md +180 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/health.md +50 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/commands/simulate.md +158 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/post_write.py +315 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/prompt_submit.py +144 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/session_start.py +57 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/hooks/triggers.json +191 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/INDEX.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/abmahn-templates.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/aegis-integration.md +60 -5
- package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +745 -11
- package/skills/compliance/aegis-native/brutaler-anwalt/references/az-auffuellung-batch1.md +468 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/bgh-urteile.md +106 -30
- package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +247 -2
- package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +75 -2
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-aufsichtsbehoerden-taetigkeitsberichte-2024.md +310 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-bussgeld-argumentations-layer.md +598 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-dsk-beschluesse.md +346 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/audit-relevance.md +76 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/paragraphs.md +115 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/audit-relevance.md +58 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/paragraphs.md +95 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/audit-relevance.md +60 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/paragraphs.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/audit-relevance.md +73 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/paragraphs.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/audit-relevance.md +72 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/paragraphs.md +103 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/audit-relevance.md +65 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/audit-relevance.md +66 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/paragraphs.md +108 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/audit-relevance.md +80 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/audit-relevance.md +89 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/paragraphs.md +107 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/paragraphs.md +119 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/audit-relevance.md +70 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/paragraphs.md +125 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/audit-relevance.md +70 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/paragraphs.md +116 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/INDEX.md +152 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/audit-relevance.md +64 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/paragraphs.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/audit-relevance.md +63 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/paragraphs.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/audit-relevance.md +61 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/paragraphs.md +96 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/audit-relevance.md +54 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/paragraphs.md +82 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/audit-relevance.md +76 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/paragraphs.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/audit-relevance.md +84 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/paragraphs.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/audit-relevance.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/paragraphs.md +91 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/audit-relevance.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/paragraphs.md +166 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/audit-relevance.md +71 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/paragraphs.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VERIFICATION-NOTES.md +111 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/audit-relevance.md +65 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/paragraphs.md +101 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/paragraphs.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/audit-relevance.md +64 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/paragraphs.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/audit-relevance.md +68 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/paragraphs.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/dsgvo.md +55 -8
- package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-edpb-guidelines.md +505 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-eugh-dsgvo-schadensersatz.md +223 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/audit-relevance.md +31 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/audit-relevance.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/audit-relevance.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/audit-relevance.md +28 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/audit-relevance.md +35 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/articles.md +4 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/audit-relevance.md +139 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/hochrisiko-annex-iii.md +134 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/sanktionen-art-99.md +97 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md +120 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/uebergangsfristen.md +109 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CER-2022-2557/articles.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CRA-2024-2847/articles.md +87 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSDDD-2024-1760/articles.md +43 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSRD-2022-2464/articles.md +42 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DGA-2022-868/articles.md +53 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DMA-2022-1925/articles.md +55 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/articles.md +164 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/audit-relevance.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/articles.md +3 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/audit-relevance.md +110 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/notice-and-action.md +138 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/small-platform-pflichten.md +109 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/trusted-flaggers.md +77 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/vlop-vlose.md +130 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/articles.md +102 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/audit-relevance.md +77 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/articles.md +124 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/audit-relevance.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/NIS2-2022-2555/articles.md +101 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/ProdHaftRL-2024-2853/articles.md +68 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/eIDAS-2024-1183/articles.md +43 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/KWG.md +52 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/PSD2.md +67 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/ZAG.md +50 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/GlueStV/articles.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/audit-relevance.md +27 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HinSchG/articles.md +96 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/JuSchG-JMStV/articles.md +86 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/KritisDachG/articles.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/LkSG/articles.md +90 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/DiGAV.md +60 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/IVDR-2017-746.md +51 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/MDR-2017-745.md +85 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/NIS2UmsuCG-BSIG/articles.md +53 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/StGB/relevante-paragraphen.md +157 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/audit-relevance.md +33 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/paragraphs.md +3 -2
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TKG/articles.md +73 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/audit-relevance.md +39 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/paragraphs.md +71 -3
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VERIFICATION-STATUS.md +266 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/audit-relevance.md +37 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/articles.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/audit-relevance.md +62 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/it-recht.md +115 -9
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md +87 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/cookie-banner-pattern.md +202 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/dse-section-pattern.md +198 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/tracking-server-endpoint.md +193 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/auth0-tom.md +92 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/clerk-tom.md +84 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/auth-cookies-pattern.md +295 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/cookie-banner-pattern.md +318 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/gdpr-cleanup-celery.md +339 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/cookie-banner-pattern.md +237 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/gdpr-routes-pattern.md +256 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/helmet-csp-pattern.md +207 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/agb-versioning-pattern.md +305 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/cookie-banner-pattern.md +287 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/gdpr-models-pattern.md +290 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/tracking-config-pattern.md +263 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/auth-pattern.md +265 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/cookie-banner-pattern.md +255 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/gdpr-cleanup-cron.md +244 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/tracking-interceptor.md +239 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/api-route-bearer-auth.md +103 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/dynamic-rendering-headers.md +83 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/env-driven-tracking.md +135 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/cookie-banner-pattern.md +294 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/devise-dsgvo-pattern.md +262 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/gdpr-anonymization-pattern.md +283 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/consent-gate-pattern.md +99 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/cookie-banner-pattern.md +204 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/cms-pii-pattern.md +301 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/notice-and-action-plugin.md +371 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/cookie-banner-pattern.md +234 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/dse-section-pattern.md +231 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/sveltekit-server-hooks-pattern.md +217 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/google-analytics-consent.md +129 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/posthog-consent.md +79 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/cookie-banner-pattern.md +208 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/dse-i18n-pattern.md +204 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/nuxt-vs-vue-only-pattern.md +197 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/tracking-pinia-pattern.md +211 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/strafrecht-steuer.md +1 -1
- package/skills/compliance/aegis-native/brutaler-anwalt/references/streitwerte.json +176 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSFA-template.md +80 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template-file-upload.md +98 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-EN-international.md +267 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Audit-Klausel-Varianten.md +148 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-CH-revDSG.md +127 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module2-controller-processor.md +180 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module3-processor-subprocessor.md +144 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Sub-Processor-List.md +114 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-TOMs.md +197 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-UK-IDTA.md +131 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-standard-DE.md +288 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/Joint-Controller-Vertrag-Art-26.md +265 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/scripts/health-check.sh +190 -48
- package/skills/compliance/aegis-native/brutaler-anwalt/scripts/test-triggers.sh +145 -0
- package/skills/compliance/aegis-native/brutaler-anwalt/settings.json +90 -0
- package/skills/defensive/permoon-fork/README.md +40 -0
- package/skills/defensive/permoon-fork/multi-model-consolidation/SKILL.md +47 -0
- package/skills/defensive/permoon-fork/multi-model-severity/SKILL.md +34 -0
- package/skills/defensive/permoon-fork/multi-model-system-prompt/SKILL.md +40 -0
- package/skills/foundation/aegis-native/aegis-handover-writer/SKILL.md +1 -1
- package/skills/foundation/aegis-native/aegis-quality-gates/SKILL.md +1 -1
- package/skills/offensive/airecon-fork/ctf-crypto/SKILL.md +260 -0
- package/skills/offensive/airecon-fork/ctf-crypto-modern-ciphers/SKILL.md +688 -0
- package/skills/offensive/airecon-fork/ctf-forensics/SKILL.md +253 -0
- package/skills/offensive/airecon-fork/ctf-forensics-network/SKILL.md +480 -0
- package/skills/offensive/airecon-fork/ctf-heap-advanced/SKILL.md +336 -0
- package/skills/offensive/airecon-fork/ctf-pwn/SKILL.md +294 -0
- package/skills/offensive/airecon-fork/ctf-pwn-rop-and-shellcode/SKILL.md +392 -0
- package/skills/offensive/airecon-fork/ctf-reversing/SKILL.md +284 -0
- package/skills/offensive/airecon-fork/frameworks-django/SKILL.md +268 -0
- package/skills/offensive/airecon-fork/frameworks-dotnet/SKILL.md +280 -0
- package/skills/offensive/airecon-fork/frameworks-express/SKILL.md +266 -0
- package/skills/offensive/airecon-fork/frameworks-fastapi/SKILL.md +193 -0
- package/skills/offensive/airecon-fork/frameworks-flask/SKILL.md +297 -0
- package/skills/offensive/airecon-fork/frameworks-laravel/SKILL.md +260 -0
- package/skills/offensive/airecon-fork/frameworks-nextjs/SKILL.md +230 -0
- package/skills/offensive/airecon-fork/frameworks-php/SKILL.md +271 -0
- package/skills/offensive/airecon-fork/frameworks-rails/SKILL.md +269 -0
- package/skills/offensive/airecon-fork/frameworks-spring/SKILL.md +245 -0
- package/skills/offensive/airecon-fork/frameworks-wordpress/SKILL.md +348 -0
- package/skills/offensive/airecon-fork/payloads-command-injection/SKILL.md +459 -0
- package/skills/offensive/airecon-fork/payloads-http-parameter-pollution/SKILL.md +129 -0
- package/skills/offensive/airecon-fork/payloads-ldap-injection/SKILL.md +100 -0
- package/skills/offensive/airecon-fork/payloads-lfi/SKILL.md +485 -0
- package/skills/offensive/airecon-fork/payloads-sqli/SKILL.md +419 -0
- package/skills/offensive/airecon-fork/payloads-ssrf/SKILL.md +125 -0
- package/skills/offensive/airecon-fork/payloads-ssti/SKILL.md +443 -0
- package/skills/offensive/airecon-fork/payloads-xss/SKILL.md +447 -0
- package/skills/offensive/airecon-fork/payloads-xxe/SKILL.md +172 -0
- package/skills/offensive/airecon-fork/postexploit-ad-credential-attacks/SKILL.md +306 -0
- package/skills/offensive/airecon-fork/postexploit-container-escape/SKILL.md +299 -0
- package/skills/offensive/airecon-fork/postexploit-credential-dumping/SKILL.md +249 -0
- package/skills/offensive/airecon-fork/postexploit-lateral-movement/SKILL.md +194 -0
- package/skills/offensive/airecon-fork/postexploit-linux-privesc/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/postexploit-netexec-workflow/SKILL.md +302 -0
- package/skills/offensive/airecon-fork/postexploit-pivoting/SKILL.md +205 -0
- package/skills/offensive/airecon-fork/postexploit-windows-privesc/SKILL.md +210 -0
- package/skills/offensive/airecon-fork/protocols-active-directory/SKILL.md +314 -0
- package/skills/offensive/airecon-fork/protocols-dns/SKILL.md +203 -0
- package/skills/offensive/airecon-fork/protocols-ftp/SKILL.md +159 -0
- package/skills/offensive/airecon-fork/protocols-graphql/SKILL.md +648 -0
- package/skills/offensive/airecon-fork/protocols-kerberos/SKILL.md +168 -0
- package/skills/offensive/airecon-fork/protocols-ldap/SKILL.md +245 -0
- package/skills/offensive/airecon-fork/protocols-rdp/SKILL.md +186 -0
- package/skills/offensive/airecon-fork/protocols-smb/SKILL.md +191 -0
- package/skills/offensive/airecon-fork/protocols-smtp-imap/SKILL.md +263 -0
- package/skills/offensive/airecon-fork/protocols-snmp/SKILL.md +147 -0
- package/skills/offensive/airecon-fork/protocols-ssh/SKILL.md +287 -0
- package/skills/offensive/airecon-fork/reconnaissance-asn-whois-osint/SKILL.md +236 -0
- package/skills/offensive/airecon-fork/reconnaissance-ctf-methodology/SKILL.md +435 -0
- package/skills/offensive/airecon-fork/reconnaissance-dorking/SKILL.md +182 -0
- package/skills/offensive/airecon-fork/reconnaissance-exposed-devtools-detection/SKILL.md +513 -0
- package/skills/offensive/airecon-fork/reconnaissance-full-recon/SKILL.md +305 -0
- package/skills/offensive/airecon-fork/reconnaissance-internal-pentest/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/reconnaissance-javascript-analysis/SKILL.md +167 -0
- package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md +391 -0
- package/skills/offensive/airecon-fork/reconnaissance-monitoring-secrets-exposure/SKILL.md +394 -0
- package/skills/offensive/airecon-fork/reconnaissance-shodan-censys/SKILL.md +279 -0
- package/skills/offensive/airecon-fork/reconnaissance-subdomain-enum/SKILL.md +952 -0
- package/skills/offensive/airecon-fork/technologies-cicd-attacks/SKILL.md +283 -0
- package/skills/offensive/airecon-fork/technologies-cloud-security/SKILL.md +299 -0
- package/skills/offensive/airecon-fork/technologies-docker-container/SKILL.md +266 -0
- package/skills/offensive/airecon-fork/technologies-elasticsearch/SKILL.md +226 -0
- package/skills/offensive/airecon-fork/technologies-firebase-firestore/SKILL.md +213 -0
- package/skills/offensive/airecon-fork/technologies-frida-hooking/SKILL.md +387 -0
- package/skills/offensive/airecon-fork/technologies-gitlab-github/SKILL.md +259 -0
- package/skills/offensive/airecon-fork/technologies-jenkins/SKILL.md +256 -0
- package/skills/offensive/airecon-fork/technologies-kubernetes-pentest/SKILL.md +281 -0
- package/skills/offensive/airecon-fork/technologies-memcached/SKILL.md +230 -0
- package/skills/offensive/airecon-fork/technologies-mobile-app-pentesting/SKILL.md +105 -0
- package/skills/offensive/airecon-fork/technologies-mongodb/SKILL.md +257 -0
- package/skills/offensive/airecon-fork/technologies-nginx-apache/SKILL.md +280 -0
- package/skills/offensive/airecon-fork/technologies-observability-stack-attacks/SKILL.md +501 -0
- package/skills/offensive/airecon-fork/technologies-redis/SKILL.md +236 -0
- package/skills/offensive/airecon-fork/technologies-supabase/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/technologies-tomcat/SKILL.md +232 -0
- package/skills/offensive/airecon-fork/tools-advanced-fuzzing/SKILL.md +351 -0
- package/skills/offensive/airecon-fork/tools-browser-automation/SKILL.md +300 -0
- package/skills/offensive/airecon-fork/tools-caido/SKILL.md +776 -0
- package/skills/offensive/airecon-fork/tools-code-review/SKILL.md +71 -0
- package/skills/offensive/airecon-fork/tools-dalfox/SKILL.md +189 -0
- package/skills/offensive/airecon-fork/tools-hashcat-john/SKILL.md +258 -0
- package/skills/offensive/airecon-fork/tools-impacket/SKILL.md +227 -0
- package/skills/offensive/airecon-fork/tools-install/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/tools-metasploit/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/tools-nmap/SKILL.md +211 -0
- package/skills/offensive/airecon-fork/tools-nuclei/SKILL.md +175 -0
- package/skills/offensive/airecon-fork/tools-reporting/SKILL.md +47 -0
- package/skills/offensive/airecon-fork/tools-scripting/SKILL.md +1939 -0
- package/skills/offensive/airecon-fork/tools-semgrep/SKILL.md +202 -0
- package/skills/offensive/airecon-fork/tools-source-audit/SKILL.md +308 -0
- package/skills/offensive/airecon-fork/tools-sqlmap/SKILL.md +137 -0
- package/skills/offensive/airecon-fork/tools-tool-catalog/SKILL.md +320 -0
- package/skills/offensive/airecon-fork/tools-wapiti/SKILL.md +293 -0
- package/skills/offensive/airecon-fork/vulnerabilities-2fa-bypass/SKILL.md +219 -0
- package/skills/offensive/airecon-fork/vulnerabilities-account-takeover/SKILL.md +223 -0
- package/skills/offensive/airecon-fork/vulnerabilities-api-schema-exposure/SKILL.md +849 -0
- package/skills/offensive/airecon-fork/vulnerabilities-api-testing/SKILL.md +278 -0
- package/skills/offensive/airecon-fork/vulnerabilities-auth-workflow/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/vulnerabilities-authentication-jwt/SKILL.md +158 -0
- package/skills/offensive/airecon-fork/vulnerabilities-bfla/SKILL.md +156 -0
- package/skills/offensive/airecon-fork/vulnerabilities-blind-xss/SKILL.md +111 -0
- package/skills/offensive/airecon-fork/vulnerabilities-business-logic/SKILL.md +313 -0
- package/skills/offensive/airecon-fork/vulnerabilities-cors/SKILL.md +242 -0
- package/skills/offensive/airecon-fork/vulnerabilities-crlf-injection/SKILL.md +146 -0
- package/skills/offensive/airecon-fork/vulnerabilities-csrf/SKILL.md +200 -0
- package/skills/offensive/airecon-fork/vulnerabilities-csrf-advanced-bypass/SKILL.md +536 -0
- package/skills/offensive/airecon-fork/vulnerabilities-deserialization/SKILL.md +363 -0
- package/skills/offensive/airecon-fork/vulnerabilities-dom-based-vulnerabilities/SKILL.md +105 -0
- package/skills/offensive/airecon-fork/vulnerabilities-exploitation/SKILL.md +286 -0
- package/skills/offensive/airecon-fork/vulnerabilities-grpc/SKILL.md +123 -0
- package/skills/offensive/airecon-fork/vulnerabilities-host-header-injection/SKILL.md +169 -0
- package/skills/offensive/airecon-fork/vulnerabilities-http-smuggling/SKILL.md +411 -0
- package/skills/offensive/airecon-fork/vulnerabilities-idor/SKILL.md +705 -0
- package/skills/offensive/airecon-fork/vulnerabilities-information-disclosure/SKILL.md +867 -0
- package/skills/offensive/airecon-fork/vulnerabilities-insecure-file-uploads/SKILL.md +190 -0
- package/skills/offensive/airecon-fork/vulnerabilities-jwt-attacks/SKILL.md +270 -0
- package/skills/offensive/airecon-fork/vulnerabilities-kubernetes/SKILL.md +252 -0
- package/skills/offensive/airecon-fork/vulnerabilities-mass-assignment/SKILL.md +788 -0
- package/skills/offensive/airecon-fork/vulnerabilities-nosql-injection/SKILL.md +204 -0
- package/skills/offensive/airecon-fork/vulnerabilities-oauth-misconfig/SKILL.md +220 -0
- package/skills/offensive/airecon-fork/vulnerabilities-oauth-saml/SKILL.md +163 -0
- package/skills/offensive/airecon-fork/vulnerabilities-open-redirect/SKILL.md +167 -0
- package/skills/offensive/airecon-fork/vulnerabilities-password-reset-poisoning/SKILL.md +66 -0
- package/skills/offensive/airecon-fork/vulnerabilities-path-traversal/SKILL.md +192 -0
- package/skills/offensive/airecon-fork/vulnerabilities-privilege-escalation/SKILL.md +320 -0
- package/skills/offensive/airecon-fork/vulnerabilities-prototype-pollution/SKILL.md +242 -0
- package/skills/offensive/airecon-fork/vulnerabilities-race-conditions/SKILL.md +192 -0
- package/skills/offensive/airecon-fork/vulnerabilities-rce/SKILL.md +240 -0
- package/skills/offensive/airecon-fork/vulnerabilities-sensitive-file-pii-exposure/SKILL.md +589 -0
- package/skills/offensive/airecon-fork/vulnerabilities-spring4shell/SKILL.md +86 -0
- package/skills/offensive/airecon-fork/vulnerabilities-sql-injection/SKILL.md +313 -0
- package/skills/offensive/airecon-fork/vulnerabilities-ssrf/SKILL.md +183 -0
- package/skills/offensive/airecon-fork/vulnerabilities-ssti/SKILL.md +344 -0
- package/skills/offensive/airecon-fork/vulnerabilities-subdomain-takeover/SKILL.md +160 -0
- package/skills/offensive/airecon-fork/vulnerabilities-supply-chain/SKILL.md +125 -0
- package/skills/offensive/airecon-fork/vulnerabilities-unhandled-exception-differential/SKILL.md +742 -0
- package/skills/offensive/airecon-fork/vulnerabilities-waf-detection/SKILL.md +90 -0
- package/skills/offensive/airecon-fork/vulnerabilities-web-cache-poisoning/SKILL.md +233 -0
- package/skills/offensive/airecon-fork/vulnerabilities-websocket/SKILL.md +180 -0
- package/skills/offensive/airecon-fork/vulnerabilities-xss/SKILL.md +316 -0
- package/skills/offensive/airecon-fork/vulnerabilities-xxe/SKILL.md +222 -0
package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
license: MIT (snippet) / Vendor-Doc separat
|
|
3
|
+
provider: Anthropic, PBC (USA — Delaware-PBC)
|
|
4
|
+
provider-AVV-status: Standardvertrag verfuegbar (DPA + EU-SCC)
|
|
5
|
+
last-checked: 2026-05-02
|
|
6
|
+
purpose: Anthropic Claude API DPA + Compliance.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Anthropic Claude — TOMs + DPA + DSE-Wording
|
|
10
|
+
|
|
11
|
+
## 1. Default-Verhalten
|
|
12
|
+
|
|
13
|
+
- Datenstandort: US (default)
|
|
14
|
+
- EU-Region: Beta verfuegbar (Stand 2026-05, Konto-Setting in Anthropic-Console)
|
|
15
|
+
- Trainings-Opt-Out fuer API-Daten Pflicht-Setting (Default = Opt-Out, kein Training auf API-Daten)
|
|
16
|
+
- Sub-Processor: AWS, GCP
|
|
17
|
+
|
|
18
|
+
## 2. Compliance-Risiken
|
|
19
|
+
|
|
20
|
+
| Risiko | Wirkung | Fix |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| Default-Region US | Schrems II / DPF-Risiko | EU-Region waehlen wenn verfuegbar |
|
|
23
|
+
| Trainings-Opt-Out nicht aktiviert | Daten in Modell-Training | Opt-Out im Account-Setting (Default OK aber pruefen) |
|
|
24
|
+
| Prompt-Speicherung | Compliance-relevant | Zero-Retention-Vereinbarung anfragen |
|
|
25
|
+
| AVV ohne EU-SCC | Drittland-Pflichtverletzung | DPA mit SCC abschliessen |
|
|
26
|
+
|
|
27
|
+
## 3. Code-Pattern (Next.js + Anthropic SDK)
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
// File: src/lib/anthropic.ts
|
|
31
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
32
|
+
|
|
33
|
+
export const anthropic = new Anthropic({
|
|
34
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
35
|
+
// Optional: EU-Region (wenn verfuegbar)
|
|
36
|
+
// baseURL: 'https://api.eu.anthropic.com',
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
export async function chat(messages: Anthropic.MessageParam[]) {
|
|
40
|
+
// PII-Pre-Filter (Datenminimierung)
|
|
41
|
+
const sanitized = messages.map(m => ({
|
|
42
|
+
...m,
|
|
43
|
+
content: redactPII(typeof m.content === 'string' ? m.content : ''),
|
|
44
|
+
}));
|
|
45
|
+
|
|
46
|
+
const response = await anthropic.messages.create({
|
|
47
|
+
model: 'claude-opus-4-7',
|
|
48
|
+
max_tokens: 1024,
|
|
49
|
+
messages: sanitized,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return response;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function redactPII(text: string): string {
|
|
56
|
+
return text
|
|
57
|
+
.replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g, '[REDACTED_EMAIL]')
|
|
58
|
+
.replace(/\b(?:\+49|0)[0-9 \-/]+\d/g, '[REDACTED_PHONE]')
|
|
59
|
+
.replace(/\bDE\d{20}\b/gi, '[REDACTED_IBAN]');
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 4. AVV / DPA
|
|
64
|
+
|
|
65
|
+
- **DPA-Link**: https://www.anthropic.com/legal/dpa
|
|
66
|
+
- **Trust Center**: https://trust.anthropic.com/
|
|
67
|
+
- **EU-SCC**: Modul 2 + 3
|
|
68
|
+
- **Sub-Processors**: https://trust.anthropic.com/sub-processors
|
|
69
|
+
|
|
70
|
+
## 5. DSE-Wording-Vorlage
|
|
71
|
+
|
|
72
|
+
> Wir nutzen Claude (Anthropic, PBC, 548 Market St PMB 90375, San Francisco, USA)
|
|
73
|
+
> als Auftragsverarbeiter im Sinne von Art. 28 DSGVO. Anthropic ist DPF-zertifiziert.
|
|
74
|
+
> EU-SCC Modul 2+3 abgeschlossen. Trainings-Opt-Out ist aktiviert. Datenschutzhinweise:
|
|
75
|
+
> https://www.anthropic.com/legal/privacy.
|
|
76
|
+
|
|
77
|
+
## 6. AI-Act-Compliance
|
|
78
|
+
|
|
79
|
+
- Claude ist GPAI-Modell — Anbieter-Pflichten Art. 53 ist Anthropic-Pflicht
|
|
80
|
+
- Operator-seitig: Pflicht zum Art. 50-Hinweis im Chat-UI
|
|
81
|
+
- Bei Hochrisiko-Use-Case: vollstaendige Annex-III-Pflichten + FRIA
|
|
82
|
+
|
|
83
|
+
## 7. Cross-Reference
|
|
84
|
+
|
|
85
|
+
- AI-Act GPAI: `gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md`
|
|
86
|
+
- AI-Act Art. 50: `gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md`
|
|
87
|
+
- Audit-Pattern Phase 5e (AI-Chatbot): `audit-patterns.md`
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
license: MIT (snippet)
|
|
3
|
+
provider: Astro (Open-Source)
|
|
4
|
+
last-checked: 2026-05-05
|
|
5
|
+
purpose: Astro Cookie-Banner Pattern mit View-Transitions + Island-Hydration + client-seitiger Consent-Init.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Astro — Cookie-Banner (Pattern)
|
|
9
|
+
|
|
10
|
+
## Trigger / Detection
|
|
11
|
+
|
|
12
|
+
Repo enthaelt:
|
|
13
|
+
- `astro.config.mjs` / `astro.config.ts` mit `integrations: [...]`
|
|
14
|
+
- `src/layouts/*.astro` Layout-Komponenten
|
|
15
|
+
- `client:load` / `client:idle` / `client:visible` Direktiven in `.astro` Files
|
|
16
|
+
- `<ClientRouter />` (View-Transitions) in Layout
|
|
17
|
+
- Optional: `@astrojs/react` / `@astrojs/vue` / `@astrojs/svelte` integration
|
|
18
|
+
|
|
19
|
+
Astro ist Static-First, das heisst Cookie-Banner muss als Island laufen (`client:load`) — sonst wird er statisch gepre-rendered und JavaScript-Logik feuert nicht.
|
|
20
|
+
|
|
21
|
+
## Default-Verhalten (was passiert ohne Konfiguration)
|
|
22
|
+
|
|
23
|
+
- Astro pre-rendered `.astro` Files zu HTML — Banner-State (zeigen/nicht zeigen) ist NICHT pro Visitor differenziert
|
|
24
|
+
- Ohne `client:*`-Direktive feuert kein JS, also liest Banner kein localStorage
|
|
25
|
+
- Mit View-Transitions-Router muss Banner `transition:persist` haben sonst remount bei jeder Navigation
|
|
26
|
+
- Tracker-Scripts (Plausible, Umami, Google Analytics) werden via `<script>` in Layout typischerweise SOFORT geladen — vor jeder Consent-Pruefung
|
|
27
|
+
|
|
28
|
+
Resultat ohne Anpassung: Tracker laeuft trotz fehlendem Consent. § 25 TDDDG-Verstoss.
|
|
29
|
+
|
|
30
|
+
## Compliance-Risiken
|
|
31
|
+
|
|
32
|
+
| Risiko | Norm | Severity | Fix |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| Tracker laedt vor Consent (Astro `<script>` im Head) | § 25 TDDDG | KRITISCH | Tracker als Island mit `client:idle` + Consent-Gate |
|
|
35
|
+
| Banner remountet pro View-Transition | DSGVO Art. 7 (Nachweisbarkeit) | MITTEL | `transition:persist` setzen |
|
|
36
|
+
| Static-Build cached Banner-State | DSGVO Art. 25 | HOCH | Banner ausschliesslich via `client:load` initialisieren |
|
|
37
|
+
| Drittland-Transfer durch CDN-Tracker | Art. 44-46 DSGVO | KRITISCH | EU-Region-Provider + AVV + TIA |
|
|
38
|
+
| Pre-Tick im Settings-Modal | EuGH C-673/17 Planet49 | KRITISCH | Default = false fuer alle Nicht-Notwendigen |
|
|
39
|
+
|
|
40
|
+
## Code-Pattern (sanitized)
|
|
41
|
+
|
|
42
|
+
```astro
|
|
43
|
+
---
|
|
44
|
+
// File: src/layouts/BaseLayout.astro
|
|
45
|
+
import CookieBanner from '../components/CookieBanner.tsx';
|
|
46
|
+
import { ClientRouter } from 'astro:transitions';
|
|
47
|
+
---
|
|
48
|
+
<!doctype html>
|
|
49
|
+
<html lang="de">
|
|
50
|
+
<head>
|
|
51
|
+
<meta charset="UTF-8" />
|
|
52
|
+
<title><slot name="title">{Astro.props.title ?? '<placeholder-site-name>'}</slot></title>
|
|
53
|
+
<ClientRouter />
|
|
54
|
+
{/* KEIN Tracker-Script hier — erst nach Consent via Island */}
|
|
55
|
+
</head>
|
|
56
|
+
<body>
|
|
57
|
+
<slot />
|
|
58
|
+
{/* transition:persist verhindert Remount bei View-Transitions */}
|
|
59
|
+
<CookieBanner client:load transition:persist="cookie-banner" />
|
|
60
|
+
</body>
|
|
61
|
+
</html>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
// File: src/components/CookieBanner.tsx (React-Island)
|
|
66
|
+
import { useEffect, useState } from 'react';
|
|
67
|
+
|
|
68
|
+
type Consent = {
|
|
69
|
+
necessary: true;
|
|
70
|
+
analytics: boolean;
|
|
71
|
+
marketing: boolean;
|
|
72
|
+
timestamp?: string;
|
|
73
|
+
version: '1.0';
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const STORAGE_KEY = 'cookie-consent';
|
|
77
|
+
|
|
78
|
+
export default function CookieBanner() {
|
|
79
|
+
const [open, setOpen] = useState(false);
|
|
80
|
+
const [consent, setConsent] = useState<Consent>({
|
|
81
|
+
necessary: true,
|
|
82
|
+
analytics: false, // Default false — Opt-In Pflicht
|
|
83
|
+
marketing: false,
|
|
84
|
+
version: '1.0',
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
89
|
+
if (!stored) setOpen(true);
|
|
90
|
+
else {
|
|
91
|
+
const parsed = JSON.parse(stored) as Consent;
|
|
92
|
+
if (parsed.analytics) loadAnalytics();
|
|
93
|
+
if (parsed.marketing) loadMarketing();
|
|
94
|
+
}
|
|
95
|
+
}, []);
|
|
96
|
+
|
|
97
|
+
const persist = (c: Consent) => {
|
|
98
|
+
const final = { ...c, timestamp: new Date().toISOString() };
|
|
99
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(final));
|
|
100
|
+
fetch('/api/consent-log', {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers: { 'Content-Type': 'application/json' },
|
|
103
|
+
body: JSON.stringify(final),
|
|
104
|
+
});
|
|
105
|
+
if (final.analytics) loadAnalytics();
|
|
106
|
+
if (final.marketing) loadMarketing();
|
|
107
|
+
setOpen(false);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
if (!open) return null;
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<aside role="dialog" aria-label="Cookie-Einwilligung" className="cookie-banner">
|
|
114
|
+
<p>
|
|
115
|
+
Wir verwenden Cookies fuer notwendige Funktionen. Mit Ihrer Einwilligung
|
|
116
|
+
zusaetzlich fuer Analyse und Marketing. Details:{' '}
|
|
117
|
+
<a href="/datenschutz">Datenschutzerklaerung</a>.
|
|
118
|
+
</p>
|
|
119
|
+
<div className="cookie-actions">
|
|
120
|
+
{/* Buttons gleichwertig (OLG Koeln 6 U 80/23) */}
|
|
121
|
+
<button onClick={() => persist({ ...consent, analytics: false, marketing: false })}>
|
|
122
|
+
Nur Notwendige
|
|
123
|
+
</button>
|
|
124
|
+
<button onClick={() => persist({ ...consent, analytics: true, marketing: true })}>
|
|
125
|
+
Alle akzeptieren
|
|
126
|
+
</button>
|
|
127
|
+
</div>
|
|
128
|
+
</aside>
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function loadAnalytics() {
|
|
133
|
+
const s = document.createElement('script');
|
|
134
|
+
s.src = 'https://<placeholder-eu-analytics-host>/script.js';
|
|
135
|
+
s.defer = true;
|
|
136
|
+
document.head.appendChild(s);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function loadMarketing() {
|
|
140
|
+
// Lade Marketing-Pixel erst nach Consent
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## AVV / DPA
|
|
145
|
+
|
|
146
|
+
Pflicht-AVV-Partner bei Default-Astro-Stack:
|
|
147
|
+
- Hosting-Provider (Netlify / Vercel / Self-host) — Art. 28 DSGVO
|
|
148
|
+
- CDN (Cloudflare / Bunny.net) — bei Drittland: SCC + TIA
|
|
149
|
+
- Analytics-Provider (Plausible EU / Umami self-hosted) — AVV bei Plausible.io B.V.
|
|
150
|
+
- Optional: Image-CDN (Cloudinary / imgix) bei `<Image>` Component
|
|
151
|
+
|
|
152
|
+
Pflicht-Dokumentation: `/datenschutz` Section "Auftragsverarbeiter" mit Tabelle (Anbieter, Sitz, Zweck, Rechtsgrundlage).
|
|
153
|
+
|
|
154
|
+
## DSE-Wording-Vorlage
|
|
155
|
+
|
|
156
|
+
```markdown
|
|
157
|
+
### Cookies und vergleichbare Technologien
|
|
158
|
+
|
|
159
|
+
Diese Website nutzt Cookies und browserseitigen Speicher (`localStorage`) fuer
|
|
160
|
+
folgende Zwecke:
|
|
161
|
+
|
|
162
|
+
**Notwendige Cookies (Rechtsgrundlage: § 25 Abs. 2 Nr. 2 TDDDG)**
|
|
163
|
+
- `cookie-consent` — speichert Ihre Einwilligungs-Entscheidung
|
|
164
|
+
(Speicherdauer: 12 Monate, kein Tracking)
|
|
165
|
+
- Session-Cookie fuer Login (falls vorhanden)
|
|
166
|
+
|
|
167
|
+
**Analyse-Cookies (Rechtsgrundlage: § 25 Abs. 1 TDDDG i.V.m. Art. 6 Abs. 1
|
|
168
|
+
lit. a DSGVO — Einwilligung)**
|
|
169
|
+
- `<placeholder-analytics-cookie>` — Webseiten-Statistiken
|
|
170
|
+
- Anbieter: <placeholder-analytics-provider>, EU-Hosting
|
|
171
|
+
- Speicherdauer: <placeholder-days> Tage
|
|
172
|
+
|
|
173
|
+
**Widerruf:** Sie koennen Ihre Einwilligung jederzeit widerrufen ueber
|
|
174
|
+
[Cookie-Einstellungen](#cookie-settings) im Footer.
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Verify-Commands (Live-Probe)
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# 1. Pre-Consent: kein Tracker-Script geladen
|
|
181
|
+
curl -sS https://<placeholder-domain>/ | grep -ic "<placeholder-analytics-host>"
|
|
182
|
+
# Erwartung: 0
|
|
183
|
+
|
|
184
|
+
# 2. Banner sichtbar fuer neue Visitors
|
|
185
|
+
curl -sS https://<placeholder-domain>/ | grep -ic "cookie-banner\|cookie-einwilligung"
|
|
186
|
+
# Erwartung: >=1
|
|
187
|
+
|
|
188
|
+
# 3. Playwright: Tracker erst nach Accept
|
|
189
|
+
npx playwright codegen https://<placeholder-domain>/
|
|
190
|
+
# Manuelle Pruefung: Network-Tab vor + nach Accept
|
|
191
|
+
|
|
192
|
+
# 4. View-Transition-persist
|
|
193
|
+
# Navigiere ueber 3 Pages mit aktivem Banner — Banner darf nicht doppelt rendern
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Cross-References
|
|
197
|
+
|
|
198
|
+
- AEGIS-Scanner: `cookie-audit.ts`, `tracking-scan.ts`, `consent-flow-checker.ts`
|
|
199
|
+
- Skill-Reference: `references/dsgvo.md` § 25 TDDDG, Art. 7 DSGVO
|
|
200
|
+
- BGH-Rechtsprechung: `references/bgh-urteile.md` BGH I ZR 7/16 (Planet49-Folgeentscheidung)
|
|
201
|
+
- EuGH: `references/eu-eugh-dsgvo-schadensersatz.md` C-673/17 Planet49
|
|
202
|
+
- Audit-Pattern: `references/audit-patterns.md` Phase 2 (Cookie-Audit)
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
license: MIT (snippet)
|
|
3
|
+
provider: Astro (Open-Source)
|
|
4
|
+
last-checked: 2026-05-05
|
|
5
|
+
purpose: Astro Static-MD/MDX Datenschutzerklaerung-Rendering-Pattern mit Content-Collections.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Astro — DSE-Section Pattern (MD/MDX)
|
|
9
|
+
|
|
10
|
+
## Trigger / Detection
|
|
11
|
+
|
|
12
|
+
Repo enthaelt:
|
|
13
|
+
- `src/content/legal/*.md` oder `*.mdx` Files
|
|
14
|
+
- `astro:content` Collections-API in `src/content/config.ts`
|
|
15
|
+
- Routes wie `/datenschutz`, `/impressum`, `/agb` als statische Pages
|
|
16
|
+
- Optional: `@astrojs/mdx` integration in `astro.config.mjs`
|
|
17
|
+
|
|
18
|
+
Pattern: DSE wird als Markdown geschrieben (versionierbar, diff-bar, durch Lawyer reviewbar) und via Astro Content-Collections gerendert. Static-Build = max. Performance, kein Server-Roundtrip.
|
|
19
|
+
|
|
20
|
+
## Default-Verhalten (was passiert ohne Konfiguration)
|
|
21
|
+
|
|
22
|
+
- DSE-Inhalte oft inline in `.astro` Page-File → Versions-Diff schwer
|
|
23
|
+
- Keine `last-updated` Metadaten → Drift zur Realitaet nicht erkennbar
|
|
24
|
+
- Keine Anker-Links zu Sub-Sektionen → Footer-Links auf "#cookies" funktionieren nicht
|
|
25
|
+
- DSE wird statisch gepre-rendered ohne `lang`-Attribut → Screen-Reader Probleme
|
|
26
|
+
|
|
27
|
+
## Compliance-Risiken
|
|
28
|
+
|
|
29
|
+
| Risiko | Norm | Severity | Fix |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| DSE outdated (kein Datum sichtbar) | Art. 13 DSGVO Transparenz | HOCH | Frontmatter `last-updated` rendern |
|
|
32
|
+
| Auftragsverarbeiter-Liste fehlt | Art. 28 DSGVO | HOCH | DSE-Section "Auftragsverarbeiter" Pflicht |
|
|
33
|
+
| Ankerlinks defekt | Art. 12 DSGVO Klarheit | MITTEL | Auto-generierte Heading-IDs |
|
|
34
|
+
| Sprache nicht ausgewiesen | BITV 2.0 Barrierefreiheit | MITTEL | `<html lang="de">` Pflicht |
|
|
35
|
+
| Versions-Historie fehlt | Art. 5 Abs. 2 Rechenschaft | MITTEL | Git-blame als Audit-Trail + DSE-Changelog |
|
|
36
|
+
|
|
37
|
+
## Code-Pattern (sanitized)
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// File: src/content/config.ts
|
|
41
|
+
import { defineCollection, z } from 'astro:content';
|
|
42
|
+
|
|
43
|
+
const legal = defineCollection({
|
|
44
|
+
type: 'content',
|
|
45
|
+
schema: z.object({
|
|
46
|
+
title: z.string(),
|
|
47
|
+
section: z.enum(['datenschutz', 'impressum', 'agb', 'widerrufsbelehrung']),
|
|
48
|
+
lastUpdated: z.coerce.date(),
|
|
49
|
+
version: z.string(),
|
|
50
|
+
author: z.string(), // z.B. "<placeholder-legal-counsel>"
|
|
51
|
+
}),
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export const collections = { legal };
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
<!-- File: src/content/legal/datenschutz.md -->
|
|
59
|
+
---
|
|
60
|
+
title: Datenschutzerklaerung
|
|
61
|
+
section: datenschutz
|
|
62
|
+
lastUpdated: 2026-05-05
|
|
63
|
+
version: "2.3"
|
|
64
|
+
author: "<placeholder-legal-counsel>"
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 1. Verantwortliche Stelle
|
|
68
|
+
|
|
69
|
+
<placeholder-company-name>
|
|
70
|
+
<placeholder-street>
|
|
71
|
+
<placeholder-postal-code> <placeholder-city>
|
|
72
|
+
E-Mail: <placeholder-email>
|
|
73
|
+
|
|
74
|
+
## 2. Erhobene Daten und Zwecke
|
|
75
|
+
|
|
76
|
+
| Datum | Zweck | Rechtsgrundlage | Speicherdauer |
|
|
77
|
+
|---|---|---|---|
|
|
78
|
+
| Server-Logs (anonymisiert) | Sicherheit, Stabilitaet | Art. 6 Abs. 1 lit. f | 14 Tage |
|
|
79
|
+
| Cookie-Consent | Nachweis Einwilligung | Art. 7 DSGVO | 12 Monate |
|
|
80
|
+
| Analytics (mit Consent) | Webseiten-Optimierung | Art. 6 Abs. 1 lit. a | <placeholder-days> Tage |
|
|
81
|
+
|
|
82
|
+
## 3. Auftragsverarbeiter
|
|
83
|
+
|
|
84
|
+
| Anbieter | Sitz | Zweck | AVV |
|
|
85
|
+
|---|---|---|---|
|
|
86
|
+
| <placeholder-hosting-provider> | <placeholder-eu-country> | Hosting | Ja |
|
|
87
|
+
| <placeholder-analytics-provider> | <placeholder-eu-country> | Webanalyse | Ja |
|
|
88
|
+
|
|
89
|
+
## 4. Ihre Rechte
|
|
90
|
+
|
|
91
|
+
Sie haben das Recht auf:
|
|
92
|
+
- Auskunft (Art. 15 DSGVO)
|
|
93
|
+
- Berichtigung (Art. 16 DSGVO)
|
|
94
|
+
- Loeschung (Art. 17 DSGVO)
|
|
95
|
+
- Einschraenkung (Art. 18 DSGVO)
|
|
96
|
+
- Datenuebertragbarkeit (Art. 20 DSGVO)
|
|
97
|
+
- Widerspruch (Art. 21 DSGVO)
|
|
98
|
+
- Beschwerde bei Aufsichtsbehoerde (Art. 77 DSGVO)
|
|
99
|
+
|
|
100
|
+
Kontakt: <placeholder-email>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```astro
|
|
104
|
+
---
|
|
105
|
+
// File: src/pages/datenschutz.astro
|
|
106
|
+
import { getEntry } from 'astro:content';
|
|
107
|
+
import BaseLayout from '../layouts/BaseLayout.astro';
|
|
108
|
+
|
|
109
|
+
const entry = await getEntry('legal', 'datenschutz');
|
|
110
|
+
if (!entry) throw new Error('Datenschutz-Eintrag fehlt');
|
|
111
|
+
|
|
112
|
+
const { Content, headings } = await entry.render();
|
|
113
|
+
---
|
|
114
|
+
<BaseLayout title={entry.data.title}>
|
|
115
|
+
<article class="legal">
|
|
116
|
+
<header>
|
|
117
|
+
<h1>{entry.data.title}</h1>
|
|
118
|
+
<p class="meta">
|
|
119
|
+
Version {entry.data.version} —
|
|
120
|
+
Stand: <time datetime={entry.data.lastUpdated.toISOString()}>
|
|
121
|
+
{entry.data.lastUpdated.toLocaleDateString('de-DE')}
|
|
122
|
+
</time>
|
|
123
|
+
</p>
|
|
124
|
+
</header>
|
|
125
|
+
|
|
126
|
+
<nav aria-label="Inhaltsverzeichnis">
|
|
127
|
+
<ol>
|
|
128
|
+
{headings.filter(h => h.depth === 2).map(h => (
|
|
129
|
+
<li><a href={`#${h.slug}`}>{h.text}</a></li>
|
|
130
|
+
))}
|
|
131
|
+
</ol>
|
|
132
|
+
</nav>
|
|
133
|
+
|
|
134
|
+
<Content />
|
|
135
|
+
|
|
136
|
+
<footer class="legal-footer">
|
|
137
|
+
<p>
|
|
138
|
+
Bei Fragen zur Verarbeitung wenden Sie sich an:
|
|
139
|
+
<a href="mailto:<placeholder-email>"><placeholder-email></a>
|
|
140
|
+
</p>
|
|
141
|
+
</footer>
|
|
142
|
+
</article>
|
|
143
|
+
</BaseLayout>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## AVV / DPA
|
|
147
|
+
|
|
148
|
+
DSE selbst loest keine AVV aus (statischer Content). ABER:
|
|
149
|
+
- Hosting-Provider liefert die DSE aus → AVV mit Hoster Pflicht
|
|
150
|
+
- CDN cached die DSE → AVV mit CDN-Provider Pflicht
|
|
151
|
+
- DSE-Inhalt MUSS jeden externen Service aus dem Repo (Tracker, Forms, Embed) als Auftragsverarbeiter listen
|
|
152
|
+
|
|
153
|
+
## DSE-Wording-Vorlage
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
### Aenderungen dieser Datenschutzerklaerung
|
|
157
|
+
|
|
158
|
+
Wir behalten uns vor, diese Datenschutzerklaerung anzupassen, falls aenderungen
|
|
159
|
+
am Webseitenbetrieb oder gesetzliche Vorgaben dies erfordern.
|
|
160
|
+
|
|
161
|
+
Die jeweils aktuelle Version ist unter dieser URL abrufbar.
|
|
162
|
+
|
|
163
|
+
**Aktuelle Version:** 2.3
|
|
164
|
+
**Stand:** 5. Mai 2026
|
|
165
|
+
**Aeltere Versionen:** Verfuegbar via Repository-History (Git-Tags
|
|
166
|
+
`legal-vX.Y` unter <placeholder-repo-url>).
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Verify-Commands (Live-Probe)
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# 1. DSE erreichbar
|
|
173
|
+
curl -sI https://<placeholder-domain>/datenschutz | head -1
|
|
174
|
+
# Erwartung: HTTP/2 200
|
|
175
|
+
|
|
176
|
+
# 2. last-updated im HTML sichtbar
|
|
177
|
+
curl -sS https://<placeholder-domain>/datenschutz | grep -ic "stand:\|version"
|
|
178
|
+
# Erwartung: >=1
|
|
179
|
+
|
|
180
|
+
# 3. Auftragsverarbeiter-Section vorhanden
|
|
181
|
+
curl -sS https://<placeholder-domain>/datenschutz | grep -ic "auftragsverarbeit"
|
|
182
|
+
# Erwartung: >=1
|
|
183
|
+
|
|
184
|
+
# 4. Sprach-Attribut korrekt
|
|
185
|
+
curl -sS https://<placeholder-domain>/datenschutz | grep -oE 'lang="[a-z]+"' | head -1
|
|
186
|
+
# Erwartung: lang="de"
|
|
187
|
+
|
|
188
|
+
# 5. Anker-Links funktionieren
|
|
189
|
+
curl -sS https://<placeholder-domain>/datenschutz | grep -oE 'id="[^"]+"' | head -10
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Cross-References
|
|
193
|
+
|
|
194
|
+
- AEGIS-Scanner: `dse-completeness-checker.ts`, `legal-pages-checker.ts`
|
|
195
|
+
- Skill-Reference: `references/dsgvo.md` Art. 13, 14 (Informationspflichten)
|
|
196
|
+
- BGH-Rechtsprechung: `references/bgh-urteile.md` (Transparenz-Anforderungen)
|
|
197
|
+
- DSK-Beschluesse: `references/de-dsk-beschluesse.md` (Auftragsverarbeitung)
|
|
198
|
+
- Audit-Pattern: `references/audit-patterns.md` Phase 1 (DSE-Vollstaendigkeit)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
license: MIT (snippet)
|
|
3
|
+
provider: Astro (Open-Source)
|
|
4
|
+
last-checked: 2026-05-05
|
|
5
|
+
purpose: Astro Server-Endpoint Pattern fuer Static-Site-Tracking ohne Client-Fetches an Drittlaender.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Astro — Server-Endpoint Tracking (Pattern)
|
|
9
|
+
|
|
10
|
+
## Trigger / Detection
|
|
11
|
+
|
|
12
|
+
Repo enthaelt:
|
|
13
|
+
- `astro.config.mjs` mit `output: 'hybrid'` oder `output: 'server'`
|
|
14
|
+
- `src/pages/api/*.ts` Server-Endpoints
|
|
15
|
+
- Adapter-Integration: `@astrojs/node` / `@astrojs/vercel` / `@astrojs/netlify`
|
|
16
|
+
- Static-Site mit Tracker-Bedarf, der NICHT direkt vom Client an Drittlaender geht
|
|
17
|
+
|
|
18
|
+
Zweck: Tracker-Calls laufen via eigener API-Route (Same-Origin) statt direkt an `<placeholder-tracking-domain>`. Vorteile: kein Drittland-Cookie, IP-Anonymisierung serverseitig, Proxy-Layer fuer DSGVO-Konformitaet.
|
|
19
|
+
|
|
20
|
+
## Default-Verhalten (was passiert ohne Konfiguration)
|
|
21
|
+
|
|
22
|
+
- `output: 'static'` (Default) erlaubt KEINE Server-Endpoints — Tracker laeuft direkt vom Client
|
|
23
|
+
- Direkte Tracker-Calls senden IP, User-Agent, Referrer ungeschuetzt an Drittland
|
|
24
|
+
- Keine Moeglichkeit zur Daten-Minimierung vor Tracker-Provider
|
|
25
|
+
- Cookie-Sets vom Drittland-Tracker nicht via § 25 TDDDG-konformem Banner gefiltert
|
|
26
|
+
|
|
27
|
+
## Compliance-Risiken
|
|
28
|
+
|
|
29
|
+
| Risiko | Norm | Severity | Fix |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| Direkter Drittland-Tracker-Call | Art. 44 DSGVO | KRITISCH | Server-Endpoint-Proxy + IP-Hashing |
|
|
32
|
+
| Kein Consent-Check serverseitig | § 25 TDDDG | HOCH | Consent-Cookie pruefen vor Forward |
|
|
33
|
+
| Volle IP an Provider | Art. 5 Abs. 1 lit. c | HOCH | IP-Truncate (letztes Octett /24) |
|
|
34
|
+
| Default-Logs Klartext-IP | Art. 5 Abs. 1 lit. f | MITTEL | Anonymisierung im Endpoint |
|
|
35
|
+
| Astro-SSR-Function in US-Region | Art. 44 DSGVO | KRITISCH | Adapter-Region auf EU pinnen |
|
|
36
|
+
|
|
37
|
+
## Code-Pattern (sanitized)
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// File: src/pages/api/track.ts
|
|
41
|
+
import type { APIRoute } from 'astro';
|
|
42
|
+
import crypto from 'node:crypto';
|
|
43
|
+
|
|
44
|
+
export const prerender = false; // Pflicht: Server-Route
|
|
45
|
+
|
|
46
|
+
const ANALYTICS_ENDPOINT = '<placeholder-eu-analytics-endpoint>';
|
|
47
|
+
const ANALYTICS_TOKEN = import.meta.env.ANALYTICS_TOKEN;
|
|
48
|
+
|
|
49
|
+
export const POST: APIRoute = async ({ request, clientAddress }) => {
|
|
50
|
+
// 1. Consent-Check (Cookie vom Banner)
|
|
51
|
+
const cookie = request.headers.get('cookie') ?? '';
|
|
52
|
+
const consentMatch = /cookie-consent=([^;]+)/.exec(cookie);
|
|
53
|
+
if (!consentMatch) {
|
|
54
|
+
return new Response(JSON.stringify({ blocked: 'no-consent' }), { status: 204 });
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const consent = JSON.parse(decodeURIComponent(consentMatch[1]));
|
|
58
|
+
if (!consent.analytics) {
|
|
59
|
+
return new Response(JSON.stringify({ blocked: 'analytics-opt-out' }), { status: 204 });
|
|
60
|
+
}
|
|
61
|
+
} catch {
|
|
62
|
+
return new Response(null, { status: 204 });
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// 2. Body-Validation (kein PII durchlassen)
|
|
66
|
+
const payload = await request.json().catch(() => ({}));
|
|
67
|
+
const safe = {
|
|
68
|
+
path: typeof payload.path === 'string' ? payload.path.slice(0, 200) : '/',
|
|
69
|
+
referrer: typeof payload.referrer === 'string' ? truncateReferrer(payload.referrer) : '',
|
|
70
|
+
timestamp: new Date().toISOString(),
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// 3. IP-Anonymisierung (letztes Octett auf 0)
|
|
74
|
+
const anonIp = anonymizeIp(clientAddress);
|
|
75
|
+
const ipHash = crypto.createHash('sha256').update(anonIp).digest('hex').slice(0, 16);
|
|
76
|
+
|
|
77
|
+
// 4. Forward an EU-Analytics-Provider
|
|
78
|
+
await fetch(ANALYTICS_ENDPOINT, {
|
|
79
|
+
method: 'POST',
|
|
80
|
+
headers: {
|
|
81
|
+
'Content-Type': 'application/json',
|
|
82
|
+
Authorization: `Bearer ${ANALYTICS_TOKEN}`,
|
|
83
|
+
},
|
|
84
|
+
body: JSON.stringify({ ...safe, visitorHash: ipHash }),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return new Response(null, { status: 204 });
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
function anonymizeIp(ip: string): string {
|
|
91
|
+
if (ip.includes('.')) {
|
|
92
|
+
return ip.replace(/\.\d+$/, '.0'); // IPv4 /24
|
|
93
|
+
}
|
|
94
|
+
if (ip.includes(':')) {
|
|
95
|
+
return ip.split(':').slice(0, 4).join(':') + '::'; // IPv6 /64
|
|
96
|
+
}
|
|
97
|
+
return '0.0.0.0';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function truncateReferrer(ref: string): string {
|
|
101
|
+
try {
|
|
102
|
+
const url = new URL(ref);
|
|
103
|
+
return `${url.origin}${url.pathname}`; // Kein Query-String
|
|
104
|
+
} catch {
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
```astro
|
|
111
|
+
---
|
|
112
|
+
// File: src/components/PageView.astro
|
|
113
|
+
---
|
|
114
|
+
<script>
|
|
115
|
+
// Feuert nur nach Consent (siehe cookie-banner-pattern.md)
|
|
116
|
+
const consent = (() => {
|
|
117
|
+
try { return JSON.parse(localStorage.getItem('cookie-consent') ?? '{}'); }
|
|
118
|
+
catch { return {}; }
|
|
119
|
+
})();
|
|
120
|
+
|
|
121
|
+
if (consent.analytics) {
|
|
122
|
+
fetch('/api/track', {
|
|
123
|
+
method: 'POST',
|
|
124
|
+
headers: { 'Content-Type': 'application/json' },
|
|
125
|
+
body: JSON.stringify({
|
|
126
|
+
path: location.pathname,
|
|
127
|
+
referrer: document.referrer,
|
|
128
|
+
}),
|
|
129
|
+
keepalive: true,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
</script>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## AVV / DPA
|
|
136
|
+
|
|
137
|
+
- Hosting-Adapter (Vercel / Netlify / Node-Self-Host) — Art. 28 DSGVO
|
|
138
|
+
- Analytics-Provider (gewaehlt fuer EU-Region) — AVV + TIA bei Drittland-Backup-Region
|
|
139
|
+
- Optional: Logging-Provider (Datadog / Sentry) — wenn Endpoint-Logs PII enthalten muessen Logs anonymisiert sein
|
|
140
|
+
|
|
141
|
+
DSE-Pflicht-Eintrag: "Daten-Verarbeitung im Auftrag" — Tracker-Provider mit Sitz, EU-Hosting-Region, Speicherdauer, Loeschvereinbarung.
|
|
142
|
+
|
|
143
|
+
## DSE-Wording-Vorlage
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
### Webanalyse via Server-Endpoint
|
|
147
|
+
|
|
148
|
+
Wir verarbeiten Webanalyse-Daten ueber unseren eigenen Server-Endpoint
|
|
149
|
+
(`/api/track`). Daten werden vor Weitergabe an unseren Analytics-Anbieter
|
|
150
|
+
anonymisiert:
|
|
151
|
+
|
|
152
|
+
- IP-Adresse: gekuerzt auf /24-Subnetz (z.B. 192.168.1.0)
|
|
153
|
+
- Referrer: ohne Query-String
|
|
154
|
+
- Visitor-Hash: SHA-256, nicht reversibel
|
|
155
|
+
|
|
156
|
+
**Anbieter:** <placeholder-analytics-provider>, Sitz: <placeholder-eu-country>,
|
|
157
|
+
EU-Hosting-Region: <placeholder-region>.
|
|
158
|
+
**Rechtsgrundlage:** § 25 Abs. 1 TDDDG i.V.m. Art. 6 Abs. 1 lit. a DSGVO
|
|
159
|
+
(Einwilligung).
|
|
160
|
+
**Speicherdauer:** <placeholder-days> Tage, danach automatische Loeschung.
|
|
161
|
+
**Widerruf:** [Cookie-Einstellungen](#cookie-settings) im Footer.
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Verify-Commands (Live-Probe)
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# 1. Endpoint blockt ohne Consent-Cookie
|
|
168
|
+
curl -X POST https://<placeholder-domain>/api/track \
|
|
169
|
+
-H "Content-Type: application/json" -d '{"path":"/test"}' -i
|
|
170
|
+
# Erwartung: 204 mit Body {"blocked":"no-consent"}
|
|
171
|
+
|
|
172
|
+
# 2. Endpoint forwarded mit Consent
|
|
173
|
+
curl -X POST https://<placeholder-domain>/api/track \
|
|
174
|
+
-H "Content-Type: application/json" \
|
|
175
|
+
-H 'Cookie: cookie-consent=%7B%22analytics%22%3Atrue%7D' \
|
|
176
|
+
-d '{"path":"/test"}' -i
|
|
177
|
+
# Erwartung: 204
|
|
178
|
+
|
|
179
|
+
# 3. Pruefe IP-Anonymisierung (Provider-Logs)
|
|
180
|
+
# Sollte 192.168.1.0 statt 192.168.1.42 zeigen
|
|
181
|
+
|
|
182
|
+
# 4. Region-Pruefung
|
|
183
|
+
dig <placeholder-domain> | grep -i "edge\|region"
|
|
184
|
+
# Erwartung: EU-Region
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Cross-References
|
|
188
|
+
|
|
189
|
+
- AEGIS-Scanner: `tracking-scan.ts`, `data-transfer-checker.ts`, `pii-flow-tracker.ts`
|
|
190
|
+
- Skill-Reference: `references/dsgvo.md` Art. 44-46 (Drittland-Transfer), § 25 TDDDG
|
|
191
|
+
- BGH-Rechtsprechung: `references/bgh-urteile.md` BGH I ZR 7/16
|
|
192
|
+
- EDPB: `references/eu-edpb-guidelines.md` Recommendations 01/2020 SCC
|
|
193
|
+
- Audit-Pattern: `references/audit-patterns.md` Phase 3 (Drittland-Audit)
|