CSRF-Bestätigungstoken: Sitzungs-ID sicher?
Frage
In asp.net Ich bin der Umsetzung einer IHttpModule CSRF-Attacken zu mildern. Es injiziert in die Antwort HTML eine versteckte Form Parameter mit dem asp.net SessionID auf GETs. Auf Pfählen überprüft es dann sicher zu stellen, dass versteckter Parameterwert die aktuellen SessionID übereinstimmt. Soweit ich weiß, ist der einzige Weg, um den Sitzungs-Wert erhalten aus dem Cookie, die nicht gelesen oder von der bösartigen Website ermittelt werden können. Gibt es etwas, ich bin mit Blick auf?
Lösung
Dieser Ansatz ist richtig. Sie müssen sicherstellen, dass alle Aktionen über eine GET-Operation vorhanden sind „sicher“ (die beste Praxis ohnehin ist), da Sie Ihre XSRF Schutz POSTs nur Anwendung sind.
Für zusätzliche Versicherung, Sie könnten es verwenden, um auf GETs auch (durch einen URL-Parameter, um alle Ihre Links hinzufügen und Überprüfung für sie in jeder Anforderung GET), aber es ist umständlich.
Wenn Sie zusätzliche paranoid sind, können Sie eine andere Zufallszahl für die alternative ID wählen. Dies würde auch schützen, wenn ein Browser Ihrer Session-Cookie zugängliche einige feindlichen Javascript auf einer anderen Website falsch macht. Wenn eine Sitzung erstellt wird, wählen Sie eine andere große Zufallszahl und speichern Sie es in Ihrer Sitzung.
Andere Tipps
Im Idealfall würden Sie etwas anderes als Session-ID verwenden, aber das ist es im Grunde. OWASP schlägt eine zufällige Form Elementnamen verwenden, die in der Sitzung des Benutzers gespeichert wird. Auf diese Weise ein Angreifer nicht einmal in der Lage sein, das richtige versteckte Feld zu schmieden.