SameSite-Eigenschaft
Ab Chrome 51 wurde ein neues SameSite-Attribut zu den Cookies des Browsers hinzugefügt, um CSRF-Angriffe und Nutzerverfolgung (böswillige Übernahme von Cookies durch Dritte) zu verhindern und Drittanbieter-Cookies zu begrenzen und so die Sicherheitsrisiken zu verringern.
SameSite definiert in RFC6265bis:Der Hyperlink-Login ist sichtbar.
Über CSRF Angriffszusammenfassung:
Die SameSite-Eigenschaft kann auf drei Werte gesetzt werden:Strict、Lax、None。
Streng: Verboten Sie strikt, dass Dritte Cookies erhalten, und senden Sie unter keinen Umständen Cookies bei Seitenübergreifenden Aktivitäten; Cookies werden nur dann enthalten, wenn die URL der aktuellen Seite mit dem Anfrageziel übereinstimmt. Diese Regel ist zu streng und kann zu einer sehr schlechten Benutzererfahrung führen. Wenn zum Beispiel ein GitHub-Link auf der aktuellen Webseite vorhanden ist, erhalten Nutzer beim Klicken auf den Sprung keine GitHub-Cookies, und der Sprung war immer nicht mehr eingeloggt.
Lax: Verhindern von Seitenübergreifenden Aktivitäten, in den meisten Fällen ist es verboten, Cookies zu erhalten, außer bei GET-Anfragen (Links, Preloads, GET-Formulare), die zur Ziel-URL führen; Sobald Streng oder Lax gesetzt ist, werden CSRF-Angriffe im Grunde eliminiert. Natürlich gilt: Vorausgesetzt, der Benutzerbrowser unterstützt die SameSite-Eigenschaft.
SameSite-AttributDefault SameSite=Lax[Diese Operation gilt für Versionen nach der Veröffentlichung der stabilen Chrome 80-Version von Chrome 80 am 4. Februar 2019]
Nichts: Es gibt keine Grenze.
Das Secure-Attribut muss ebenfalls gesetzt werden (Cookies können nur über das HTTPS-Protokoll gesendet werden), andernfalls ist es nicht gültig. [Diese Operation gilt für Versionen nach der Veröffentlichung der stabilen Chrome 80-Version von Chrome 80 am 4. Februar 2019]
Teste die SameSite-Eigenschaft
Wir laden dynamisch ein Bild von Standort A über die F12-Konsole an Standort A, der Code lautet wie folgt:
Wir können aus der Netzwerkanfrage erkennen, dass Standort A, wenn er ein Bild des Domainnamens von Standort A anfordert, dies tun wirdKekse tragen(SameSite hat keine Einstellungen, z. B. Lax), wie im untenstehenden Bild gezeigt:
Wir finden zufällig eine B-Stelle, laden dann dynamisch das Bild von A und finden sieNicht tragenJeder Keks, wie unten gezeigt:
(Ende)
|