Andreas van Hulst

E-Commerce & Web Developer

AI Coding Tools & Datenschutz: Sensible Daten in Contao & Shopware schützen | Leitfaden 2026

von Andreas van Hulst

AI-Coding-Tools wie Claude Code, Cursor oder GitHub Copilot haben meine tägliche Arbeit grundlegend verändert. Code-Reviews, Refactoring, Debugging – vieles geht heute schneller und präziser als noch vor zwei Jahren. Doch bei aller Begeisterung gibt es eine Frage, die ich mir bei jedem neuen Projekt stelle: Was passiert eigentlich mit meinen sensiblen Daten?

Denn die Realität ist: Diese Tools lesen Ihre Projektdateien. Alle. Auch die .env mit den Datenbankzugangsdaten. Auch den SQL-Dump mit Kundenadressen. Auch die auth.json mit dem privaten GitLab-Token. Und diese Daten werden zur Verarbeitung an externe Server übertragen.

In diesem Artikel zeige ich, wie Sie AI-Coding-Tools verantwortungsvoll einsetzen – mit konkreten Konfigurationen für Contao- und Shopware-Projekte, die Sie direkt übernehmen können.


Das Problem: Warum .gitignore nicht reicht

Ein weit verbreiteter Irrtum: „Die .env steht doch in der .gitignore, also ist sie sicher." Falsch. .gitignore verhindert lediglich, dass eine Datei in Git committet wird. Lokal ist sie weiterhin vorhanden – und AI-Coding-Tools arbeiten mit Ihrem lokalen Dateisystem, nicht mit dem Git-Repository.

Wenn Claude Code, Cursor oder Copilot Ihren Projektkontext analysieren, können sie auf jede Datei zugreifen, die auf Ihrer Festplatte liegt. Das bedeutet:

  • .env und .env.local mit Datenbankpasswörtern und API-Secrets
  • Datenbank-Dumps (*.sql, *.sql.gz) mit personenbezogenen Kundendaten
  • SSH-Keys und JWT-Zertifikate für Server- und API-Zugang
  • auth.json mit Composer-Repository-Credentials

All diese Daten können im Rahmen der Kontextanalyse an die Server des jeweiligen AI-Anbieters übertragen werden. Und spätestens hier wird es DSGVO-relevant.


Übersicht: Schutzmechanismen im Vergleich

Bevor wir in die Details gehen, ein Überblick über die verschiedenen Schutzschichten:

Mechanismus Was er tut Was er nicht tut
.gitignore Verhindert Git-Commits Schützt nicht vor AI-Tool-Zugriff
.claudeignore Sollte Claude Code den Zugriff verwehren Bekannte Umgehungen, nicht zuverlässig
permissions.deny Blockiert Dateizugriff in Claude Code Greift nur für Claude Code
Privacy Mode (Cursor/Windsurf) Zero Data Retention beim Anbieter Muss manuell aktiviert werden
Content Exclusions (Copilot) Schließt Dateien auf Organisationsebene aus Nur für Enterprise verfügbar

Die ehrliche Wahrheit: Kein einzelner Mechanismus reicht aus. Effektiver Schutz entsteht durch das Zusammenspiel mehrerer Schichten:

Schicht 1: .gitignore              → Verhindert Commit (nicht AI-Zugriff)
Schicht 2: permissions.deny        → Verhindert AI-Lesezugriff (Claude Code)
Schicht 3: Tool-Privacy-Mode       → Verhindert Datenübertragung (Cursor/Windsurf)
Schicht 4: Keine Secrets im Code   → Eliminiert das Risiko an der Quelle

Claude Code absichern: permissions.deny

Für Claude Code ist permissions.deny in der .claude/settings.json der empfohlene Weg. Diese Einstellung greift zuverlässiger als die ältere .claudeignore-Datei, bei der dokumentierte Sicherheitsprobleme bekannt sind.

Projekt-Level-Konfiguration

Die folgende Datei gehört ins Projekt-Repository und schützt das gesamte Team:

// .claude/settings.json
{
  "permissions": {
    "deny": [
      "Read(.env)",
      "Read(.env.*)",
      "Read(.env.local)",
      "Read(auth.json)",
      "Read(config/parameters.yml)",
      "Read(hosts.yaml)",
      "Read(**/*.sql)",
      "Read(**/*.sql.gz)",
      "Read(**/secrets/**)",
      "Read(**/credentials.*)",
      "Read(**/*.pem)",
      "Read(**/*.key)",
      "Read(**/.ssh/**)"
    ]
  }
}

Globale User-Level-Konfiguration

Zusätzlich empfehle ich eine globale Absicherung unter ~/.claude/settings.json, die für alle Projekte greift:

// ~/.claude/settings.json
{
  "permissions": {
    "deny": [
      "Read(~/.ssh/**)",
      "Read(~/.gnupg/**)",
      "Read(~/.aws/**)",
      "Read(~/.config/gcloud/**)",
      "Read(**/*.env)",
      "Read(**/*.env.*)",
      "Read(**/auth.json)"
    ]
  }
}

Hooks: Warnung bei sensiblen Dateien

Claude Code unterstützt Hooks, die bei Dateioperationen ausgelöst werden. Ein Warn-Hook als zusätzliche Sicherheitsschicht:

<!-- .claude/hooks/warn-sensitive-files.local.md -->
---
name: warn-sensitive-files
enabled: true
event: file
conditions:
  - field: file_path
    operator: regex_match
    pattern: \.(env|env\.local|env\..*|pem|key)$
action: warn
---

**Achtung:** Diese Datei kann sensible Daten enthalten (Zugangsdaten, API-Keys, Zertifikate).
Stelle sicher, dass keine Secrets in den AI-Kontext gelangen.

Sensible Dateien in Contao-Projekten

In meiner täglichen Arbeit mit Contao begegnen mir immer wieder die gleichen kritischen Dateien. Hier das vollständige Inventar:

Datei Inhalt Risiko
.env DATABASE_URL, MAILER_DSN, ADMIN_EMAIL Hoch – DB-Zugangsdaten, Mail-Config
.env.local APP_SECRET Kritisch – Verschlüsselungs-Key
auth.json Composer-Repository-Credentials (z. B. GitLab-Token) Kritisch – Repository-Zugang
config/parameters.yml DB-Host, DB-User, DB-Passwort, Secret Kritisch – Legacy-Konfiguration
hosts.yaml SSH-Hostname, Port, User, Deploy-Pfade Hoch – Server-Zugang
**/*.sql / **/*.sql.gz Datenbank-Dumps mit personenbezogenen Daten Kritisch – DSGVO-relevant
files/ Uploads mit potenziell personenbezogenen Inhalten Mittel – abhängig vom Inhalt

Empfohlene .claude/settings.json für Contao

{
  "permissions": {
    "deny": [
      "Read(.env)",
      "Read(.env.*)",
      "Read(.env.local)",
      "Read(auth.json)",
      "Read(config/parameters.yml)",
      "Read(hosts.yaml)",
      "Read(deploy-assets-sync.php)",
      "Read(**/*.sql)",
      "Read(**/*.sql.gz)",
      "Read(var/backups/**)",
      "Read(files/**)"
    ]
  }
}

Tipp: Pflegen Sie eine .env.sample mit Platzhaltern statt echten Werten. So kann Claude Code die Struktur Ihrer Umgebungsvariablen verstehen, ohne Zugriff auf die eigentlichen Secrets zu benötigen.


Sensible Dateien in Shopware-Projekten

Shopware-Projekte bringen zusätzliche Angriffsflächen mit – insbesondere durch JWT-Keys und die direkte Integration von Payment-Providern:

Datei Inhalt Risiko
.env APP_SECRET, INSTANCE_ID, DATABASE_URL, APP_URL Kritisch – Store-Kommunikation
.env.local Überschreibungen für lokale Umgebung Kritisch – lokale Secrets
config/jwt/private.pem JWT Private Key für API-Auth Kritisch – API-Zugang
config/jwt/public.pem JWT Public Key Mittel – öffentlich
config/packages/*.yaml Payment-Provider-Keys, API-Credentials Hoch – abhängig vom Inhalt
**/*.sql / **/*.sql.gz Kunden-, Bestell-, Zahlungsdaten Kritisch – DSGVO-relevant
files/ Produkt-Medien, ggf. Kundenuploads Mittel

Empfohlene .claude/settings.json für Shopware

{
  "permissions": {
    "deny": [
      "Read(.env)",
      "Read(.env.*)",
      "Read(.env.local)",
      "Read(auth.json)",
      "Read(config/jwt/private.pem)",
      "Read(config/jwt/*.pem)",
      "Read(**/*.sql)",
      "Read(**/*.sql.gz)",
      "Read(var/backups/**)",
      "Read(files/**)",
      "Read(public/media/**)"
    ]
  }
}

Shopware Secrets Vault nutzen

Shopware 6 bietet einen integrierten Secrets Vault, der Secrets aus der Dateisystem-Ebene entfernt. Das reduziert die Angriffsfläche erheblich:

# Shopware PaaS
shopware secret:set DATABASE_URL --env prod
shopware secret:set APP_SECRET --env prod

# Lokal: Symfony Vault
bin/console secrets:set DATABASE_URL --env=prod

Ein Vault-Secret überschreibt automatisch gleichnamige .env-Variablen. Damit liegen sensible Werte nicht mehr als Klartext in Dateien – und können von AI-Tools gar nicht erst gelesen werden.


Tool-Vergleich: Privacy-Einstellungen

Neben Claude Code gibt es weitere populäre AI-Coding-Tools. Hier ein Überblick über deren Privacy-Optionen:

Cursor

Settings → Privacy Mode → Enable
  • Privacy Mode aktiv: Zero Data Retention, kein Speichern, kein Training
  • SOC 2 Type II zertifiziert
  • Jährliche Penetrationstests

GitHub Copilot

Organization Settings → Copilot → Content Exclusions
# Beispiel Content Exclusion (Organization-Level)
- "**/.env"
- "**/.env.*"
- "**/config/jwt/**"
- "**/*.sql"
- "**/auth.json"
  • Enterprise: Code Referencing deaktivierbar
  • SOC 1/2/3, ISO 27001 zertifiziert

Windsurf (Codeium)

Settings → Privacy → Zero-Data Mode → Enable
  • Zero-Data-Modus: Kein Code wird an externe Server gesendet
  • Self-Hosted-Deployment möglich (Air-Gapped)
  • Wichtig: Muss manuell aktiviert werden

Vergleichsübersicht

Tool Schutzmechanismus Zertifizierung Zuverlässigkeit
Claude Code permissions.deny DPA verfügbar Hoch (empfohlen)
Cursor Privacy Mode (global) SOC 2 Type II Hoch
GitHub Copilot Content Exclusions (Org) SOC 1/2/3, ISO 27001 Hoch (Enterprise)
Windsurf Zero-Data Privacy Mode Hoch (manuell aktivieren)

DSGVO: Was Entwickler wissen müssen

Das Thema ist nicht nur technisch relevant – es hat auch eine rechtliche Dimension. Sobald personenbezogene Daten (Kundennamen, E-Mail-Adressen, Bestelldaten aus DB-Dumps) an einen AI-Anbieter übertragen werden, greifen die Regeln der DSGVO.

Auftragsverarbeitung (Art. 28 DSGVO)

Der Einsatz von AI-Coding-Tools, die Code an externe Server senden, kann eine Auftragsverarbeitung darstellen. Prüfen Sie, ob ein Data Processing Agreement (DPA) vorliegt:

  • Anthropic (Claude): DPA verfügbar
  • Microsoft (Copilot): DPA über Microsoft Enterprise Agreement
  • Cursor: DPA auf Anfrage

Technische Maßnahmen (Art. 32 DSGVO)

  1. Zugangskontrolle: permissions.deny für sensible Dateien konfigurieren
  2. Datenminimierung: Keine Datenbank-Dumps im Projektverzeichnis belassen
  3. Pseudonymisierung: Für die Entwicklung anonymisierte Testdaten verwenden
  4. Transparenz: Team über AI-Tool-Nutzung und Datenfluss informieren

Meine Empfehlung

Für Projekte mit personenbezogenen Daten – und das sind praktisch alle E-Commerce- und CMS-Projekte:

  • AI-Tools nur mit Privacy Mode oder permissions.deny einsetzen
  • Datenbank-Dumps nach dem Import sofort löschen
  • Anonymisierte Entwicklungsdatenbanken verwenden, keine Produktionsdaten lokal

Checkliste: Projekt-Setup in 4 Schritten

Diese Schritte können Sie direkt in Ihr nächstes Projekt übernehmen:

Schritt 1: .claude/settings.json erstellen

mkdir -p .claude
{
  "permissions": {
    "deny": [
      "Read(.env)",
      "Read(.env.*)",
      "Read(.env.local)",
      "Read(auth.json)",
      "Read(config/parameters.yml)",
      "Read(hosts.yaml)",
      "Read(**/*.sql)",
      "Read(**/*.sql.gz)",
      "Read(**/*.pem)",
      "Read(**/*.key)",
      "Read(var/backups/**)"
    ]
  }
}

Schritt 2: .gitignore ergänzen

# AI-Tool lokale Konfiguration
.claude/*.local.md
.claude/*.local.json

Schritt 3: .env.sample pflegen

APP_ENV=dev
APP_SECRET=CHANGE_ME
DATABASE_URL="mysql://user:password@127.0.0.1:3306/dbname"
MAILER_DSN=null://
ADMIN_EMAIL=admin@example.com

Schritt 4: Team dokumentieren

Ergänzen Sie Ihr CLAUDE.md oder README.md:

## AI-Tools & Datenschutz

Dieses Projekt verwendet `.claude/settings.json` mit `permissions.deny`,
um den Zugriff auf sensible Dateien durch AI-Coding-Tools zu verhindern.

**Nicht von AI-Tools lesen lassen:**
- `.env`, `.env.local` (Zugangsdaten)
- `auth.json` (Composer-Credentials)
- `hosts.yaml` (Server-Zugangsdaten)
- `*.sql` / `*.sql.gz` (Datenbank-Dumps mit personenbezogenen Daten)

FAQ: Häufig gestellte Fragen

Nein. .gitignore verhindert nur, dass Dateien in Git committet werden. AI-Coding-Tools arbeiten mit dem lokalen Dateisystem und können auf alle Dateien zugreifen, die auf Ihrer Festplatte liegen – unabhängig von der .gitignore.

Bedingt. Anthropic hat .claudeignore implementiert, es gibt jedoch dokumentierte Fälle, in denen Claude Code Dateien trotz Eintrag lesen konnte. Die empfohlene Alternative ist permissions.deny in .claude/settings.json.

Die großen Anbieter (Anthropic, Microsoft, Cursor) geben an, Code-Daten nicht für Modelltraining zu verwenden. Der Code wird jedoch zur Verarbeitung an deren Server übertragen. Prüfen Sie die aktuellen Datenschutzrichtlinien und aktivieren Sie den Privacy Mode, wo verfügbar.

Am besten gar keine Produktionsdaten lokal vorhalten. Arbeiten Sie mit anonymisierten Entwicklungsdatenbanken. Falls Sie Dumps temporär benötigen: In permissions.deny aufnehmen (Read(**/*.sql), Read(**/*.sql.gz)) und nach dem Import sofort löschen.

Wenn personenbezogene Daten an den AI-Anbieter übertragen werden könnten, ja. In der Praxis ist es einfacher, die Übertragung technisch zu unterbinden (über permissions.deny und Privacy Modes), als für jedes Tool einen AVV abzuschließen.

Keines ist „von Haus aus" sicher – alle erfordern bewusste Konfiguration. GitHub Copilot bietet die umfangreichsten Enterprise-Zertifizierungen (SOC 1/2/3, ISO 27001). Claude Code überzeugt mit dem granularen permissions.deny-Mechanismus. Cursor und Windsurf bieten effektive Privacy Modes. Entscheidend ist, dass Sie den jeweiligen Schutzmechanismus auch aktivieren.


Fazit

AI-Coding-Tools sind ein enormer Produktivitätsgewinn – aber sie erfordern ein Bewusstsein für Datenschutz, das über die übliche .gitignore hinausgeht. Die gute Nachricht: Mit wenigen Konfigurationsschritten lässt sich das Risiko erheblich reduzieren.

Mein Ansatz ist pragmatisch: Ich nutze Claude Code täglich und intensiv. Aber ich stelle sicher, dass sensible Dateien über permissions.deny geschützt sind, keine Produktionsdaten lokal herumliegen und mein Team weiß, welche Regeln gelten.

Für Contao- und Shopware-Projekte ist das besonders relevant, weil wir regelmäßig mit Kundendaten, Payment-Credentials und Server-Zugangsdaten arbeiten. Die vier Schritte aus der Checkliste oben dauern keine zehn Minuten – und ersparen Ihnen im Ernstfall eine Menge Ärger.

Mein Rat? Richten Sie permissions.deny ein. Heute noch. Es ist die beste Investition von zehn Minuten, die Sie in Ihrem nächsten Projekt machen können.

Einen Kommentar schreiben

Was ist die Summe aus 8 und 3?