CSRF-Token sind nicht ‚benötigt auf jeden Fall‘ (wie in, werden Formen, ohne sie arbeiten), aber sie sind eine extrem gute Idee, wenn alle Daten von einer Webseite einreichen, zu einer anderen Webseite/script. Es gibt bemerkenswert wenig Weg von vertrauen, dass alle Daten page 2
erhalten von page 1
kam (Abbildung unten lesen). Jede Seite in Isolationen hat keine Ahnung, auf welcher Seite der Benutzer zuvor war, und selbst Dinge, die darauf hinweisen sollen, wie $_SERVER['HTTP_REFERER']
, können von Browserbenutzern leicht manipuliert werden.
CSRF Token sind Seiten-zu-Seite-Schlüssel, die der empfangenden Seite ein wesentlich höheres Maß an Vertrauen geben, dass der Besucher von den beabsichtigten Absenderseite (n) kam. Deployed Eigentum können sie auch Datenwiederholung zu verhindern, die auch ein großer Bonus ist und auf skrupellose Spam und verschwendete CPU-Zyklen reduziert.
Ein Aspekt, der CSRF-Token kann verwendet werden für:
Angenommen, Sie auf einer Seite ein Formular haben, die Seite page1.php
genannt wird, und die Form ist ein send contact email
, wo das Formular ausgefüllt und dann gesendet, kann die Seite, an die es gesendet wird (page2.php) erstellen und dann eine Kontakt-E-Mail an den beabsichtigten Empfänger senden.
Von diesem der nächste Schritt ist jemand kann den Quellcode der page1.php
Form lesen. Das ist trivial einfach und sagt den Leuten, was $_POST
Werte gibt und die Position des Ziels, an das das Formular gesendet wird (page2.php
).
Ein einfacher Benutzer lädt Ihre page1.php
, verbringen zehn Minuten schriftlich eine sorgfältig formulierte E-Mail vor dem Drücken der SEND Schaltfläche und Absenden des Formulars. Aus dem Formular geht an die page2.php
, die ihre Details in eine E-Mail erstellt, die an [email protected]
gesendet wird.
Nun, wenn jemand den Quellcode von page1.php
nimmt sie einen einfachen PHP-Skript (oder einen anderen Code) Verarbeitung verwendet Hunderte oder Tausende von Spam-Formen page2.php
, jeder von ihnen mit den richtigen Details zu senden zu generieren und senden Aus einer Email kann diese für verschiedene nafariöse Prozesse verwendet werden, sie können Formulare von zahlreichen anderen Webseiten, beliebigen anderen Teilen des Internets oder sogar von ganzen Botnets senden, wenn sie sich dazu entscheiden - page2.php
würde mit vielen Anfragen eine Sekunde überflutet werden und die Empfänger der E-Mails wird eine Mailbox vollgestopft mit nutzlosen formgenerierten Nachrichten haben.
Geben Sie CSRF-Token
Ein CSRF-Token ist ein eindeutiger Schlüssel, der in Form gespeichert wird, bei der Erzeugung auf page1.php
und würde in der Regel (aber nicht ausschließlich) verwenden (möglicherweise zufällig) erzeugten $_SESSION
Werte so, dass, wenn Das Formular wird gesendet und die $_POST
Daten werden an page2.php
gesendet. Dies ist eine ziemlich zuverlässige Überprüfung, dass das Formular von der gleichen Website gesendet wird. Anstatt also ganze Botnets, die Daten an page2.php
senden und viele E-Mails senden, werden die Daten nicht verarbeitet und stattdessen werden nur die von der gleichen Website gesendeten Seiten im Skript page2.php
ausgeführt.
Alternativ können Sie, wenn die obige Situation eintritt, auch verfolgen, wo schlechte Übermittlungen kommen und andere Prozesse/Skripte verwenden, um andere Botnets/Server daran zu hindern, Daten an Ihren Server zu senden.
Die obige Abbildung ist eine Form von Versicherung und Prozesssteuerung, so dass Sie eine starke reliablility, dass Daten, die auf page2.php
durch eine CSRF passiert:
if ($_SESSION['key'] === $_POST['key']){
unset($_SESSION['key']); ///prevent repetition
...
send email
}
(zum Beispiel).
Diese if
-Anweisung wird nur mit Formulardaten ausgeführt, die zuverlässig von einer zuverlässigen Quelle gesendet wurden (page1.php
). Damit verhindern Sie, dass andere Server Ihre Skripte piggybacken, und verhindern krasse DOS-Angriffsversuche, die Ihre page2.php
und andere positive Dinge überladen, weil sie wissen, dass page1.php
die Daten gesendet hat, die unter page2.php
verwendet werden.
Ein weiterer Aspekt CSRF-Token für
im Code Siehe verwendet werden, über die ich $_SESSION
CSRF Wert unset? Dies bedeutet, dass wenn Sie F5 drücken oder den page2.php
Besuch aktualisieren (indem Sie ihn in Ihren Browser eingeben oder sonstwie) werden die Originaldaten nicht erneut erneut gesendet. Dies kann verhindern, dass Benutzer ein Formular einmal ausfüllen und dann wie ein wütender Teenager in einem Forum erneut senden (POST-Daten werden immer in der Seite HTTP-Header gespeichert und beim Aufruf der Seite erneut übermittelt, so dass das Deaktivieren von $_POST
Daten in PHP sinnlos ist .).
CSRF ist ein Sicherheitsmechanismus, der - wenn der CSRF-Token-Test bestanden wird - bedeutet, dass Sie sicher, dass die Daten an ein Skript gesendet beurteilen können auf dem Server von einem gültigen kam und Quelle bestimmt.
ja - kann nicht schaden, da sie als Kontaktformulare Schutz gegen Massenmissbrauch helfen, Foren etc. sind große Ziele für Spammer so ein csrf Token Prüfmechanismus aufweist, ist nur gut – RamRaider