claude-vault/knowledge/anti-patterns/secrets-in-code.md
2026-02-04 16:49:53 +01:00

1.8 KiB

ANTI-PATTERN: Secrets im Code

KONTEXT

Django-Projekte, Docker-Container, CI/CD-Pipelines.

WAS IST PASSIERT?

# SCHLECHT: Secrets hardcoded
DATABASES = {
    'default': {
        'PASSWORD': 'super_secret_123',  # Im Git!
    }
}

# SCHLECHT: API-Key im Code
STRIPE_API_KEY = 'sk_live_abc123...'

# SCHLECHT: Im Dockerfile
ENV DATABASE_PASSWORD=production_password

WARUM WAR ES SCHLECHT?

  • Security Breach: Jeder mit Repo-Zugang hat die Credentials
  • Git History: Selbst nach Löschen bleibt der Commit in der History
  • Rotation: Passwort-Änderung erfordert Code-Deployment
  • Compliance: Verstößt gegen SOC2, GDPR, PCI-DSS

DIE BESSERE ALTERNATIVE

Django Settings

# GUT: Environment Variables
import os

DATABASES = {
    'default': {
        'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
    }
}

# Oder mit django-environ
import environ
env = environ.Env()
environ.Env.read_env()  # .env Datei

DATABASE_PASSWORD = env('DATABASE_PASSWORD')

Docker / Kubernetes

# GUT: Kubernetes Secret
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
stringData:
  password: ${PASSWORD}  # Wird beim Deploy injiziert

# Deployment
env:
  - name: DATABASE_PASSWORD
    valueFrom:
      secretKeyRef:
        name: db-credentials
        key: password

CI/CD (GitLab)

# GUT: CI/CD Variables (masked)
deploy:
  script:
    - echo "$DATABASE_PASSWORD"  # Aus GitLab Variables

ERKENNUNGSREGELN

  • Pre-commit Hook: detect-secrets
  • GitLab/GitHub Secret Scanning aktivieren
  • grep nach password, secret, key, token in Codebase

CHECKLISTE

  • .env in .gitignore?
  • Keine Secrets in Docker Images?
  • CI/CD Variables als "masked" markiert?
  • Secret Rotation dokumentiert?