Grund für die Verwendung eines Tokens im HTML-Format und Einchecken von PHP-Code

8

In einem Code habe ich diese Token-Erstellung für eine Login-Seite gesehen:

$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true));

Dann wird dieses Token als verborgene Eingabe im Login-Formular wiederholt und bei der Übergabe überprüft php code zur Validierung des Logins dieses Token wie folgt:

%Vor%

Was nutzt dieses Token?

Bearbeiten: Diese Seite beschreibt die Verwendung: Ссылка

    
Vpp Man 19.11.2011, 02:03
quelle

3 Antworten

8

Dieser Ansatz wird häufig verwendet, um CSRF-Schwachstellen

zu verhindern     
Jani Hartikainen 19.11.2011, 02:06
quelle
1

Dies wird verwendet, um vor Cross-Site-Anforderungsfälschungsangriffen zu schützen, wobei ein nicht autorisierter Benutzer einen derzeit angemeldeten (autorisierten) Benutzer dazu zwingen kann, auf Ihrer Website Anfragen auszuführen, indem er Links erstellt, die zu Formularposts führen.

>

Die Idee ist, dass Ihre Website zuerst das Anti-CSRF-Token generiert und an den autorisierten Client übergeben haben muss. Aber dieses Token ist dem Angreifer unbekannt und muss verwendet werden, um eine gültige Anfrage an Ihre Website zu senden.

Ein Beispiel für einen CSRF-Angriff könnte einen Benutzer dazu verleiten, auf einen Link zu klicken, der dazu führt, dass ein Spam-Post in den Facebook-Stream des Nutzers hochgeladen wird, wenn Facebook nicht ordnungsgemäß gegen CSRF mit einem Token geschützt wurde. Da der Benutzer bereits angemeldet war, hat die angegriffene Website (Facebook) die Buchungsanfrage als gültig behandelt.

    
Michael Berkowski 19.11.2011 02:09
quelle
1

Token sind nützlich, um einen gewissen Schutz vor CSRF-Angriffen zu bieten, und sie sind auch nützlich, um ein Limit für die Einreichung eines Formulars zu erzwingen.

Oder einfach gesagt, kann verwendet werden, um zu verhindern, dass jemand versehentlich dasselbe Formular zweimal abschickt, indem er zweimal auf die Senden-Schaltfläche klickt.

Beispiel: Sie tätigen auf der Website Ihrer Bank eine Online-Überweisung von 10 € von Konto A zu Konto B. Wenn der Bildschirm "Geld überweisen" angezeigt wird, wird im Hintergrund ein eindeutiges Token angezeigt. Sie geben die Zu / Ab-Konten und den Betrag ein und drücken die Senden-Taste, und drücken sie dann versehentlich erneut, bevor die nächste Seite geladen wird.

Ihr Browser sendet den HTTP-POST zweimal. Bei der ersten Anforderung empfängt der Server das Token, bestätigt, dass es gültig ist, löscht es dann oder markiert es als ungültig. Bei der zweiten Anforderung stellt der Server fest, dass das (gleiche) Token nicht mehr gültig ist und die Übertragung nicht verarbeitet. Hätte es das nicht getan, hättest du gerade $ 20 anstelle von $ 10 überwiesen.

Eine Möglichkeit, darüber nachzudenken, ist, wenn Sie ein Formular laden, erhalten Sie ein Token speziell für die Instanz des gerade geladenen Formulars. Wenn Sie einreichen möchten, verwenden Sie das Token. Sobald Sie das Token verwenden, ist es weg. Willst du ein anderes Token? Laden Sie die Seite / das Formular neu, um eine andere Seite zu erhalten.

Hinweis: Es gibt Möglichkeiten, JavaScript zu verwenden, um doppelte Klick-Klicks zu verhindern, die ebenfalls verwendet werden sollten. Dies hilft jedoch nicht, wenn eine doppelte HTTP-Anfrage aus einem anderen Grund vorliegt (Browser-Fehler) , Hardware-Problem usw.). Tokens sollten für jede Transaktion verwendet werden, die zu Datenänderungen oder zur Verwendung von Ressourcen führt (z. B. Drucken) und nicht unbeabsichtigt dupliziert werden sollte.

    
BBBThunda 17.09.2013 16:42
quelle

Tags und Links