flawopen.com/CSRF/SameSite-Cookies
Ersetzt SameSite=Strict CSRF-Token?
SameSite=Strict ist eine starke, vom Browser durchgesetzte Schutzschicht für cookie-authentifizierte Anfragen von einer anderen Site, aber kein universeller CSRF-Schutz. Benachbarte Subdomains gelten weiterhin als dieselbe Site, auch wenn sie unterschiedliche Origins haben. Clients, die das Attribut nicht durchsetzen, erhalten keinen Schutz. Verwenden Sie weiterhin ein CSRF-Token oder eine andere anfragebezogene Origin-Prüfung, wenn es das Bedrohungsmodell erfordert.
Was SameSite tatsächlich bewirkt
Ein SameSite=Strict-Cookie wird bei Cross-Site-Anfragen nicht gesendet, auch nicht beim klassischen CSRF-Muster, bei dem eine fremde Site ein Formular an Ihre Anwendung sendet. Dadurch hängt der Browser das Sitzungscookie in diesem Kontext nicht automatisch an. SameSite gilt für eine Site, nicht für eine Origin: Eine Anfrage von einer benachbarten Subdomain kann weiterhin same-site sein. Strict schützt daher nicht vor einem kompromittierten oder nicht vertrauenswürdigen benachbarten Host. Nach einem externen Link kann Strict außerdem dazu führen, dass der Nutzer zunächst nicht angemeldet ist, weil das Cookie bei dieser Navigation fehlt.
Wo die Grenzen liegen
Wenn die Anwendung ein Bearer-Token ausdrücklich in den Authorization-Header einfügt, steuert SameSite diesen Header nicht. Das automatische Cookie-Verhalten des Browsers ist anders. Das macht nicht jedes solche Design sicher: Prüfen Sie, ob ein anderer Mechanismus Zugangsdaten automatisch anhängen kann, und schützen Sie Tokens vor Diebstahl und Missbrauch.
Explizites SameSite=Lax erlaubt Same-Site-Anfragen und Cross-Site-Top-Level-Navigationen mit einer sicheren Methode wie GET; bei Cross-Site-Unterressourcen und Navigationen mit unsicherer Methode wird das Cookie nicht gesendet. Fehlt das Attribut, gilt der Standard des User-Agents. In Chromium unterscheidet sich dieser Standard von explizitem Lax: Die aktuelle Implementierung lässt bestimmte Cookies ohne explizites Attribut bis zu 2 Minuten nach dem Erstellen bei unsicheren Cross-Site-Top-Level-Anfragen zu (Lax-allowing-unsafe). Verlassen Sie sich bei CSRF nicht auf dieses browserspezifische Kompatibilitätsverhalten. Setzen Sie das gewünschte Attribut explizit, testen Sie unterstützte Clients und machen Sie Zustandsänderungen niemals über eine sichere Methode erreichbar.
SameSite wird vom Browser durchgesetzt. Ein Client, der das Attribut nicht unterstützt oder beachtet, erhält dadurch keinen Schutz. Prüfen Sie die unterstützten Clients und behandeln Sie SameSite als Defense-in-Depth neben einem passenden CSRF-Token, einer Origin-Prüfung oder einer anderen primären Abwehr.
Häufige Fragen
Beachten Sie die gesonderten Hinweise zu sicheren Methoden. Zustandsändernde Aktionen dürfen nicht über eine sichere Methode wie GET erreichbar sein; sichere Methoden sollen den Serverzustand nicht ändern.