Frage

In ASP.NET MVC 1.0, gibt es ein neues Feature für den Umgang mit Cross-Site-Request-Forgery-Sicherheitsproblem:

 <%= Html.AntiForgeryToken() %>
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
    // ... etc
}

Ich fand das Token in HTML-Form erzeugt hält jedes Mal eine neue Form gemacht wird, zu ändern.

Ich möchte wissen, wie diese Token generiert wird? Und wenn einige Software nutzen Sie diese Seite zu scannen, wird es ein weiteres Sicherheitsproblem berichten: Session festgelegt. Warum? Da die Token verändert immer wieder, wie kann dieses Problem kommen?

Und es ist eine weitere Funktion, das heißt „Salz“ für die antiForgeryToken, aber ich weiß wirklich, was diese verwendet für, auch durch die wir verwenden „Salz“ nicht das Token zu erzeugen, das Token wird die ganze Zeit ändert, so, warum eine solche Funktion haben?

War es hilfreich?

Lösung

Viele Informationen über die AntiForgeryToken hier: http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

Dies ist eine Cross-Site Request Forgery (CSRF) zu verhindern. Es ist ziemlich Standard-Verhalten ‚Speichern‘ füllen ein Formular klicken und eine Aktion auf dem Server, das heißt Durchführen eines Details des Benutzers zu speichern. Wie wissen Sie, den Benutzer das Formular abgesendet wird der Benutzer sie vorgeben zu sein? In den meisten Fällen würden Sie einige Cookie oder Windows-basierte Auth verwenden.

Was passiert, wenn ein Angreifer lockt Sie zu einer Website, die genau die gleiche Form in einem kleinen versteckten IFRAME einreicht? Ihre Cookies intakt vorgelegt bekommen und der Server die Anforderung nicht wie jeder anders auf eine legit Anfrage sehen. (Wie gmail hat entdeckt: http: //www.gnucitizen. org / Blog / google-gmail-E-Mail-Hijack-Technik / )

Die Fälschungs Token verhindert, dass diese Form des Angriffs durch einen zusätzlichen Cookie Erstellen Token jedes Mal eine Seite generiert wird. Das Token ist sowohl in der Form und der Cookie, wenn die Form und Cookie nicht übereinstimmen wir einen CSRF-Angriff haben (wie der Angreifer nicht in der Lage sein würde, die Fälschungs Token mit dem Angriff oben beschrieben, lesen).

Und was hat das Salz zu tun, aus dem Artikel über:

  

Das Salz ist nur eine beliebige Zeichenfolge. Ein anderes Salz Wert bedeutet eine verschiedene Fälschungs Token generiert. Dies bedeutet, dass selbst wenn ein Angreifer halten, ein gültiges Token zu bekommen irgendwie schafft sie es in anderen Teilen der Anwendung nicht wiederverwendet werden kann, wo ein anderes Salz Wert erforderlich ist.

Update: Wie wird das Token generiert? Laden Sie das Quelle und einen Blick auf die AntiForgeryDataSerializer, AntiForgeryData Klassen.

Andere Tipps

Sie haben ein paar unabhängigen Probleme stellen:

  1. Ich weiß nicht, warum Ihre Sicherheitssoftware ‚session fixed‘ berichten. Versuchen Sie das Lesen der Dokumentation, die mit dem Bericht kommt
  2. Die Fälschungs token:

Dies verwendet wird (vermutlich) zu bestätigen, dass jede Anforderung gültig ist. So bedenkt, dass jemand versucht, einen Link auf die Seite ?x=1 zu präsentieren, wenn das Token nicht auch übergeben, wird der Antrag abgelehnt. Darüber hinaus ist es (möglicherweise) verhindern, den gleichen Artikels doppeltes Posting. Wenn Sie zweimal ‚post‘ klicken, wird der Token wahrscheinlich ändern (jede Anfrage), und dieser Fall wird über so etwas wie erkannt werden:

Session["nextToken"] = token;
WriteToken(token);

...

if( !Request["nextToken"] == Session["nextToken"] ){
    ...
}

// note: order in code is slightly different, you must take the token
// before regenerating it, obviously

Ich denke, der Begriff dafür (der Angriff schützt) "CSRF" (Cross-Site Request Forgery) genannt wird, in diesen Tagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top