CSRF Tokens vs Nonce Verwirrung - sind sie gleich?

8

Bei dem Versuch, die aktuelle Anwendung sicherer zu machen, habe ich über CSRF-Token und Nonce gelesen - ich glaube, ich habe die Idee hinter den CSRF-Tokens verstanden, aber ich habe Probleme, "gut" zu finden &Ampere; vereinfachte 'Ressourcen und Beispiele von Nonces.

Meine Frage ist einfach, sind CSRF Tokens und Nonce die gleiche Sache? Was ich bisher sammeln konnte ist, dass beide Methoden verschiedene Techniken haben, um dasselbe Ziel zu erreichen, oder verstehe ich etwas falsch?

Wenn sie anders sind, könntest du nett sein, einen Beispielcode zu liefern oder auf einige Links zu verweisen, wo ich mehr über die Implementierung von nonces in PHP-Apps erfahren kann.

Danke!

    
Zubair1 17.04.2011, 04:33
quelle

3 Antworten

9

Nonce ist normalerweise eine zufällige Zeichenfolge, die zur Anforderung hinzugefügt wird, um die Daten, die zur Berechnung der Signatur verwendet werden, in unvorhersehbarer Weise zu ändern. Daher wird Nonce normalerweise von keiner serverseitigen Geschäftslogik verwendet.

Während das CSRF-Token irgendwo auf dem Server gespeichert ist, wird es an den Client übergeben und muss zum Vergleich an den Server zurückgegeben werden. Und wenn Übereinstimmungen - dann OK.

In diesem Fall ist es besser, das csrf-Token einmal in einer Session-Variablen wie

zu speichern %Vor%

und verwenden Sie es unverändert während der Lebensdauer der Sitzung in allen Formen, die Sie in Ihrer Anwendung haben.

(Wenn Sie random_bytes() nicht haben, verwenden Sie random_compat , um es zu füllen.)

    
zerkms 17.04.2011, 04:39
quelle
11

Nein, sie sind nicht gleich.

Nonces verhindert Replay-Angriffe (verhindert, dass Lauscher signierte Anfragen speichern und später erneut senden, wenn Alice beispielsweise "Pay Bob $ 100" sendet, möchten Sie nicht, dass jemand diese 100 Mal erneut sendet).

CSRF-Token patch HTML-spezifische Schwachstelle bei der Authentifizierung der Benutzeraktion, wobei die Website von Drittanbietern Formulare mit Anmeldeinformationen des Benutzers, der die Site anzeigt, senden kann (z. B. JavaScript auf evil.example.com, das Formular an facebook.com sendet, authentifiziert wie Sie).

CSRF-Tokens müssen geheim sein, andernfalls würde der Angreifer das fehlende Teil haben, um eine Anfrage zu fälschen.

Nonces müssen nicht geheim sein, wenn sie mit dem Geheimnis des Anforderers signiert sind (solange der Angreifer ein Nonce nicht durch ein anderes ersetzen kann).

Sie können die Wiedergabe von Anfragen mit CSRF-Token zulassen und trotzdem gegen CSRF geschützt sein (Sie interessieren sich dafür, ob dies eine absichtliche Aktion des Benutzers war, möchte den Benutzer jedoch nicht unbedingt davon abhalten, sie mehrmals auszuführen).

Tatsächlich ist das sehr oft nützliche Eigenschaft, z.B. Ermöglicht Benutzern, die Schaltfläche "Zurück" zu verwenden und Formulare mit korrigierten Werten erneut zu senden. Wenn Sie CSRF-Schutz mit einem Nonce-ähnlichen Mechanismus implementieren, erhalten Sie Fehlalarme, wenn Benutzer übermittelte Seiten aktualisieren.

Eine einfache Möglichkeit, CSRF ohne Nonces zu verhindern, besteht darin, die Sitzungs-ID in ein verstecktes Feld einzufügen (kein gespeicherter Wert in der Sitzung, sondern die ID der Sitzung selbst, in der Sie gespeichert haben) der Cookie [ session_id() in PHP]). Wenn das Formular gesendet wird, überprüfen Sie, ob die Sitzungs-ID des Formulars mit der ID im Cookie übereinstimmt. Das ist genug für CSRF, da Angreifer den Wert des Cookies nicht kennen können (CSRF erlaubt nur Angreifern, blind Cookies zu senden).

    
Kornel 21.03.2012 11:14
quelle
6

Es ist irgendwie dasselbe. Ein "Nonce" ist nur ein einmaliges Passwort. Es kann als kryptografisches Salz dienen, ist aber grundsätzlich nur ein zufälliger Wert. Siehe WP: Nonce

Aber um es zusammenzufassen, ein Nonce wird häufig verwendet als CSRF-Token. Es ist ein Implementierungsdetail. Der Unterschied zu anderen Anwendungsfällen besteht darin, dass es später aktiviert wird.

    
mario 17.04.2011 04:51
quelle

Tags und Links