Clear-Site-Data für AWS CloudFront konfigurieren

Browser-Daten beim Logout per CloudFront Function oder Lambda@Edge löschen — Cache, Cookies und Storage sicher räumen auf AWS.

AWS CloudFront · Schritt für Schritt

Clear-Site-Data auf AWS CloudFront

Der Clear-Site-Data-Header weist den Browser an, gespeicherte Daten zu löschen — Cache, Cookies und/oder Storage. Er wird typischerweise nur auf der Logout-Route gesetzt, um nach dem Abmelden alle Session-Daten aus dem Browser zu entfernen. Clear-Site-Data ist mit 3 von 166 Punkten ein Faktor im Wolf-Agents Web Security Check.

Auf AWS CloudFront gibt es zwei Ansätze: Eine CloudFront Function prüft den URI im Viewer-Response Event und setzt den Header nur auf Logout-Routen. Für komplexere Szenarien erkennt Lambda@Edge Logout-Responses anhand von Origin-Headern oder Status-Codes. Beide Varianten stellen sicher, dass der Header nicht auf normalen Seiten erscheint.

Wichtig: Clear-Site-Data darf niemals in der Default-Response-Headers-Policy stehen. Andernfalls werden bei jedem Seitenaufruf alle Cookies und der Cache gelöscht — die Website wird unbenutzbar.

1 Implementierung

Clear-Site-Data auf AWS CloudFront konfigurieren

Die CloudFront Function prüft den URI und setzt den Clear-Site-Data-Header nur auf Logout-Routen. Die Werte "cache", "cookies" und "storage" müssen in Anführungszeichen stehen. Für komplexere Logout-Logik (z.B. Origin-basierte Erkennung) nutzen Sie Lambda@Edge.

functions/clear-site-data.js CloudFront Function
// CloudFront Function — Clear-Site-Data auf Logout
// Event: Viewer Response
function handler(event) {
  var response = event.response;
  var request = event.request;

  // Nur auf Logout-Routen setzen
  if (request.uri === '/logout'
    || request.uri === '/api/auth/logout'
    || request.uri === '/api/auth/signout') {
    response.headers['clear-site-data'] = {
      value: '"cache", "cookies", "storage"'
    };
  }

  return response;
}
lambda/clear-site-data.js Lambda@Edge
// Lambda@Edge — Logout-Erkennung per Origin-Response
// Event: Origin Response
exports.handler = async (event) => {
  const request = event.Records[0].cf.request;
  const response = event.Records[0].cf.response;

  // Logout-Route erkennen
  const isLogout = request.uri.startsWith('/logout')
    || request.uri.startsWith('/api/auth/logout');

  // Alternativ: Logout per Origin-Header erkennen
  const originFlag = response.headers['x-clear-site-data'];

  if (isLogout || originFlag) {
    response.headers['clear-site-data'] = [{
      key: 'Clear-Site-Data',
      value: '"cache", "cookies", "storage"'
    }];

    // Internes Flag entfernen
    delete response.headers['x-clear-site-data'];
  }

  return response;
};
CloudFront Function vs. Lambda@Edge

CloudFront Functions sind schneller (sub-Millisekunde), günstiger und laufen auf allen Edge Locations. Lambda@Edge bietet mehr Funktionalität (externe API-Calls, größeres Code-Limit), wird aber ausschließlich in us-east-1 deployed — relevant für DSGVO-Compliance.

2 Verifizierung

Header verifizieren

Prüfen Sie, dass der Clear-Site-Data-Header nur auf der Logout-Route erscheint und auf normalen Seiten fehlt. Bei CloudFront-gecachten Responses erstellen Sie eine Invalidierung, um alte Responses ohne den Header zu entfernen. Der Wolf-Agents Web Security Check prüft den Header automatisch.

Terminal Verifizieren
# Clear-Site-Data auf Logout-Route prüfen
curl -sI https://ihre-domain.de/logout | grep -i clear-site-data

# Erwartete Ausgabe:
clear-site-data: "cache", "cookies", "storage"

# POST-Variante der Logout-Route
curl -sI -X POST https://ihre-domain.de/api/auth/logout | grep -i clear-site-data

# Sicherstellen: Header NICHT auf normalen Seiten
curl -sI https://ihre-domain.de | grep -i clear-site-data
# Erwartete Ausgabe: (leer — kein Header)

# CloudFront-Invalidierung bei gecachten Responses
aws cloudfront create-invalidation \
  --distribution-id E1234567890 \
  --paths "/logout" "/api/auth/logout"
terraform/clear-site-data.tf Terraform
# terraform/clear-site-data.tf
resource "aws_cloudfront_function" "clear_site_data" {
  name    = "clear-site-data-logout"
  runtime = "cloudfront-js-2.0"
  comment = "Clear-Site-Data auf Logout-Route"
  publish = true
  code    = file("functions/clear-site-data.js")
}

# Function an Distribution anhängen
resource "aws_cloudfront_distribution" "main" {
  default_cache_behavior {
    function_association {
      event_type   = "viewer-response"
      function_arn = aws_cloudfront_function.clear_site_data.arn
    }
  }
}

# Alternative: Separates Behavior nur für /logout
resource "aws_cloudfront_response_headers_policy" "logout" {
  name = "logout-clear-site-data"

  custom_headers_config {
    items {
      header   = "Clear-Site-Data"
      value    = "\"cache\", \"cookies\", \"storage\""
      override = true
    }
  }
}

Häufige Fehler

Header in Default-Policy gesetzt

Clear-Site-Data in der Standard-Response-Headers-Policy löscht bei jedem Seitenaufruf alle Cookies und den Cache. Die Website wird unbenutzbar. Verwenden Sie eine CloudFront Function mit URI-Prüfung oder ein separates Behavior.

Anführungszeichen in Terraform escaped

In Terraform müssen doppelte Anführungszeichen innerhalb eines Strings escaped werden: \\"cache\\", \\"cookies\\". Ohne korrekte Escapierung generiert Terraform einen ungültigen Header-Wert.

CloudFront-Cache liefert alten Response

Nach Deployment der CloudFront Function liefert der Cache möglicherweise noch Responses ohne den Header. Erstellen Sie eine Invalidierung für die Logout-Route: aws cloudfront create-invalidation.

Viewer-Response vs. Origin-Response verwechselt

CloudFront Functions unterstützen nur Viewer-Events. Für Origin-Response benötigen Sie Lambda@Edge. Wenn Sie die Function am falschen Event-Typ anhängen, wird der Header nicht gesetzt.

Compliance-Relevanz

DSGVO (Art. 17 — Recht auf Löschung) erfordert die technische Umsetzung der Datenlöschung — Clear-Site-Data entfernt personenbezogene Daten aus dem Browser beim Logout. Beachten Sie bei Lambda@Edge die DSGVO-Implikation: Die Funktion wird in us-east-1 deployed, verarbeitet aber keine personenbezogenen Daten — sie setzt nur einen Response-Header. PCI DSS verlangt die sichere Beendigung von Sessions. Der Wolf-Agents Web Security Check bewertet Clear-Site-Data mit bis zu 3 Punkten und prüft die korrekte Konfiguration auf der Logout-Route.

Wie steht Ihre Domain bei Clear-Site-Data?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.