Um prevent CSRF benötigen Sie einen Wert, der mit der Anforderung übermittelt wird, die nicht von einer bösartigen Website gesendet werden kann. Authentifizierungscookies sind nicht geeignet, denn wenn ein Angreifer den Browser dazu veranlassen kann, eine Anfrage an die Opferseite zu senden, werden die Cookies automatisch übermittelt.
Zum Beispiel, indem ein Formular über JavaScript auf www.evil.com
enthaltenen Vorlage der Sitzung des Benutzers auf www.example.com
angreifen:
<form method="post" action="https://www.example.com/executeAction">
<input type="hidden" name="action" value="deleteAllUsers">
</form>
<script>document.forms[0].submit()</script>
Speichern eines anti CRSF Token innerhalb der Seite ist die OWASP empfohlene Lösung zur Verhinderung einer anderen Website von der Abgabe Das Formular, da das zufällige Token in der Sitzung des Benutzers nicht von www.evil.com
aufgrund der Same Origin Policy verhindert JavaScript unter www.evil.com
Lesen des Seiteninhalts von www.example.com
gelesen werden kann.
Diese Tokens können an beliebiger Stelle auf der Seite gespeichert werden. Am häufigsten wird es innerhalb versteckter Formularfelder sein, aber sie könnten auch innerhalb HTML 5 data- attributes gespeichert werden. Es scheint, als ob die Verwendung von meta
Tags ist einfach eine andere Möglichkeit, es gespeichert werden kann, wo das JavaScript kann es in Form von Übermittlungen der Seite enthalten.
'www.evil.com' nicht erreichen kann das genaue Token eines Benutzers von 'www.example.com', auch wenn SOP ** deaktiviert ** ist (dh die Anfrage von' www.evil.com' ist eine separate Sitzung, daher sollte ein neues Token generiert werden). – rakeen
Es ist die gleiche Sitzung, wenn Sie die gleiche Instanz des Browsers verwenden (Bar-Verwendung von inkognito oder privaten Browser-Modus natürlich). – SilverlightFox
Wie würde 'www.example.com' wissen, ob es sich um dieselbe Sitzung handelt? Die Anfrage von 'www.evil.com' hat kein Token. – rakeen