2012-03-25 14 views
1

las ich in mehr als eine Website über dieses Verfahren zum Schutz von Formen:md5 Token in verstecktem Formularfeld

Ich füge einen Hidden:

<input type="hidden" name="token" value="<?php echo $token; ?>" /> 

das Token erzeugt durch:

$token = md5(uniqid(rand(), TRUE)); 
$_SESSION['token'] = $token; 

Ich verstehe, dass dieser Code aufgrund seiner Zufälligkeit praktisch unzerbrechlich ist.

Was ich nicht verstehe, ist: warum sie das Token in einem versteckten Formularfeld enthalten, die in der HTML-Quelle angesehen werden kann?

kann dann ein Benutzer das Formular speichern und die gültigen md5 Token auf eine gefälschte Version des Formulars kopieren und einreichen?

Antwort

3

Dies soll CSRF verhindern.

Der Punkt ist nicht Alice besucht Bob Webseite zu stoppen, und dann mit dem Token schlechte Dinge zu tun.

Es ist Charles' Webseite verwenden JavaScript, um Alices Browser einreichen ein Formular Bob Webseite und schlimme Dinge zu tun (mit Alice Anmeldeinformationen) zu stoppen. (Charles wird keine Kopie des Tokens haben, um es in das Formular einzufügen).

+0

ok Ich mag es und ich werde es als die Antwort markieren. Aber wie kann man verhindern, dass ein Benutzer ein Formular offline verwendet und die Daten ändert? –

+0

Sie stellen sicher, dass jede Änderung, die sie versuchen, eine ist, zu der sie berechtigt sind. – Quentin

+0

Ich habe dies getan, indem ich überprüft habe, dass die Antwort nur Zahlen enthält (ich beschäftige mich mit Produkt-IDs). Aber ich wollte zusätzliche Sicherheit, indem ich gefälschte Daten komplett blockiere. Ich denke, das ist dann unmöglich! –

0

Es ist eine Strategie zur Vermeidung von Cross-Site Request Forgery. Es spielt keine Rolle, dass sich das Token in der HTML-Quelle befindet, da es nur einmal verwendet wird. Der Angreifer müsste zuerst wissen, was er tut, um den Benutzer zu überlisten, und selbst dann muss der Benutzer das Formular bereits mit legitimen Mitteln aufgerufen haben.

0

Diese Technik wird verwendet, um Cross-Site Request Forgery attacks zu verhindern, wenn eine böswillige Website authentisch und legitim im Auftrag eines Opfers schmieden kann, wenn das Opfer eine vorbereitete Webseite der bösartigen Website besucht. Da der Browser des Opfers alle Authentifizierungsdaten zusammen mit der gefälschten Anfrage sendet, kann der Server nicht unterscheiden, ob die Anfrage vom Opfer beabsichtigt wurde oder nicht.

Ein einfaches Beispiel <img> Elemente, die den Browser GET-Anfragen zu senden, ein weiteres Beispiel sind <form> Elemente, die automatisch generiert werden und durch JavaScript senden und POST-Anfragen führen kann.

Um diese Bedrohung abzuschwächen, wird dieses zufällige Token als Geheimnis verwendet, das nur dem Server und dem Browser bekannt ist: Der Server generiert das zufällige Token, speichert es in der Sitzung und gibt es in der Antwort an den Browser aus Es sendet dann in nachfolgenden Anfragen zurück. Auf diese Weise kann die bösartige Website keine legitimen Anforderungen fälschen, da sie das zufällige Token nicht kennt und es nicht abrufen kann.