Response-Validierung

Bidirektionaler Schutz - validiert Datenbank-Antworten und maskiert sensible Daten vor der Auslieferung.

Konfiguration

Response-Validierungsregeln in policy.yaml:

# policy.yaml
response_rules:
  - query: "get_user_by_id"
    max_rows: 1
    mask_columns:
      - column: "ssn"
        mask: "XXX-XX-####"    # Letzte 4 Ziffern sichtbar
      - column: "email"
        mask: "****@****.***"  # Vollständig maskiert
      - column: "phone"
        mask: "+49****####"    # Nur Ländercode + letzte 4

  - query: "list_users"
    max_rows: 100
    strip_columns: ["password_hash", "secret_key"]
RESP-001PASS

Spaltenmaskierung angewendet

Originale Datenbank-Antwort

 id | name       | email              | ssn         | phone
----+------------+--------------------+-------------+---------------
  1 | Max Müller | max@beispiel.de    | 123-45-6789 | +4915112345678

Maskierte Antwort (an Client geliefert)

 id | name       | email              | ssn         | phone
----+------------+--------------------+-------------+---------------
  1 | Max Müller | ****@****.***      | XXX-XX-6789 | +49****5678

Sensible Spalten werden automatisch maskiert, bevor die Antwort die Anwendung erreicht. Die Originaldaten verlassen nie das ALG.

RESP-002BLOCKED

Zeilenlimit überschritten

Abfrage (max_rows: 1 konfiguriert)

SELECT * FROM users WHERE department = $1  -- gibt 50 Zeilen zurück

Erwartete Antwort

ERROR: Response-Validierung fehlgeschlagen
DETAIL: Abfrage gab 50 Zeilen zurück, Maximum ist 1.
HINT: Fügen Sie strengere WHERE-Bedingungen hinzu oder erhöhen Sie max_rows in der Policy.

Wenn die Datenbank mehr Zeilen als max_rows zurückgibt, wird die gesamte Antwort blockiert, um Massendaten-Exfiltration zu verhindern.

RESP-003PASS

Spalten-Stripping

Originale Datenbank-Antwort

 id | name       | password_hash                        | secret_key
----+------------+--------------------------------------+------------
  1 | Max Müller | $argon2id$v=19$m=65536,t=3,p=4$... | sk_live_...

Bereinigte Antwort

 id | name
----+------------
  1 | Max Müller

Spalten in der strip_columns-Liste werden vollständig aus der Antwort entfernt. Die Anwendung sieht sie nie.