2014-01-25 5 views
5

IHtml Antiforgerytoken Cookie und Eingabewerte sind verschiedene

CSRF Präventionstechniken

am Lernen und es wird erwähnt, dass

Antiforgerytoken

ist einer von die Möglichkeiten, es zu verhindern. In einer ASP.NET MVC-Anwendung können wir das Html Helper verwenden, um das Token hinzuzufügen.

Wenn ich Fiddler verwende, merke ich, dass der Wert des Tokens in der versteckten Form Eingabe-Tag und der Wert im Cookie mit dem gleichen Namen sind unterschiedlich. Soll das so sein?

In diesem Fall, wie das ASP.NET-Framework darauf achten, dass die Anfrage nicht gefälscht ist.

Hope meine Frage ist klar.

+0

"[Cookies und Nonces] ... ist eine der Möglichkeiten, dies zu verhindern." - Das stimmt nicht genau. Der Bösewicht wird wahrscheinlich immer in der Lage sein, zum Nonce oder Cookie zu kommen. OWASP deckt sie auf ihrer CSRF-Seite unter [Präventionsmassnahmen, die nicht funktionieren] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet) ab. Die einzige Möglichkeit zur vollständigen Korrektur besteht darin, den Benutzer herauszufordern. Das bedeutet, dass der Benutzer sich bei einer Transaktion mit hohem Wert erneut authentifizieren muss. – jww

+0

OWASP nur sagen, verwenden Sie nicht "ein Geheimer Cookie". Ein Token-Wert, der außerhalb des Cookie-Mechanismus übergeben wird, ist immer noch die Empfehlung. – SilverlightFox

+0

mögliches Duplikat von [Warum gibt es einen Unterschied zwischen dem Wert des Validierungsanforderers und dem versteckten Formularwert?] (Http://stackoverflow.com/questions/20911470/why-is-there-a-difference-in-the-validateantiforgerytoken- Cookie-Wert-und-Hidde) – SilverlightFox

Antwort

7

Es gibt verschiedene Daten, die in Cookie (das "Salt" und Token) und HTML-Markup (Salz, Token, Erstellungszeit, Benutzername) serialisiert sind. Sie sind anders, aber immer noch vergleichbar.

Einige ausführlichere Erklärung:

MVC Cookies haben interne Struktur, so dass ihre serialisierte Version anders aussieht. Das tatsächliche Sicherheitstoken, das sich darin befindet, sollte identisch sein. Der Serializer speichert verschiedene Informationen, abhängig davon, welche Informationen vorhanden sind (Name der Benutzeridentität usw.). Es gibt auch ein Versions-Byte, ein Indikator, ob dies ein Session-Cookie ist usw.