Wie überlebt das MVC-Anti-Fälschungs-Token zwischen Neustarts des Webservers?

8

Ich habe einen Anti-Fälschungs-Schutz mit dem ValidateAntiForgeryTokenAttribute in MVC 5 implementiert. Es funktioniert gut, aber in Zukunft werden wir vielleicht eher zu einem "Webfarm" -Ansatz für das Hosting übergehen. Wenn ich meine Anwendung in Entwicklung ausführe und zu einem Formular gehe, den Webserver neu starte (indem ich die App in Visual Studio neu starte) und dann ein Formular abschicke, wird die System.Web.Mvc.HttpAntiForgeryException nicht ausgelöst.

Unsere Anwendung verwendet keinen anderen Sitzungsstatus. Kann mir jemand helfen zu verstehen, wie mein Server dort weitermacht, wo er aufgehört hat? Ich definiere keinen ComputerKey in meiner web.config oder irgendwo anders, das ich finden kann. Hat es etwas mit dem Ausführen in einer Entwicklungsumgebung zu tun?

Die einzigen Hinweise, die ich finden kann, sind für frühere Versionen von MVC, also frage ich mich, ob das jetzt anders gelöst ist.

Ich bin froh, dass diese Funktionalität funktioniert, aber ich muss verstehen, warum.

    
DustinA 23.07.2014, 20:49
quelle

1 Antwort

2

Der Server selbst erinnert sich an nichts; es muss nicht.

Die zwei Dinge, die hier am Werk sind, sind:

  • Das Formular versteckte Eingabe
  • Ein Cookie

Dies bedeutet, dass wenn der Benutzer eine Seite mit AntiForgeryToken besucht, der Server neu gestartet wird, ist dies kein Problem, da die __RequestVerificationToken des Benutzers und des Formulars immer noch dieselben sind.

Das tatsächliche Sicherheitstoken ist ein Hash-Schlüssel, der im AntiForgeryToken -Objekt gespeichert ist. Dieses Objekt wird nach Base 64 serialisiert. Das sehen Sie, wenn Sie sich die Werte von __RequestVerificationToken ansehen. Da die Sicherheitsschlüssel jedes Mal gespeichert werden, befinden sich die Werte selbst bei einem Zurücksetzen des Servers immer noch in diesen Objekten. Die Schlüssel werden dann abgerufen und verglichen, um die Token zu validieren.

Während dieses Vorgangs erfolgt keine Entschlüsselung. Die Token werden deserialisiert, die Sicherheitsschlüssel gelesen und verglichen. Da die Sicherheitsschlüssel nicht verschlüsselt sind, aber eher hashed sind, können sie nicht entschlüsselt werden. nur verglichen.

    
Rowan Freeman 23.07.2014 22:48
quelle