Ich habe eine Frage zum Stoppen von gefälschten Formularübermittlungen. Wie wäre es, wenn ich mit dem $_SERVER['HTTP_REFERER']
Ich erlaube nur Eingaben in meine Formulare von meiner Website aus? Würde das helfen?! Danke!
Antworten
Zu viele Anzeigen?Es würde helfen, und es ist ziemlich einfach hinzuzufügen, aber es wird einen gezielten Angriff nicht verhindern, schließlich kann man eine HTTP_REFERER
Kopfzeile.
Es ist zu beachten, dass ein Kunde nicht verpflichtet ist, eine HTTP_REFERER
Wenn also die Kopfzeile fehlt, sollten Sie Einreichungen trotzdem zulassen. Wenn dies nicht möglich ist, sollten Sie HTTP_REFERER
wird Ihnen nicht helfen.
Suche nach CAPTCHA durchführen "Vollständig automatisierter öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen" Das ist es, wonach Sie wirklich suchen.
Das Hauptproblem beim Formular-Spoofing ist, dass Sie keine Kontrolle darüber haben, was der Kunde sendet. Der Benutzer könnte jeden beliebigen Formularparameter ändern. Daher muss alles, was der Kunde bei der Übermittlung des Formulars sendet, validiert und überprüft werden.
Das bedeutet auch: Je weniger Parameter Sie in das Formular eingeben, desto weniger müssen Sie validieren und überprüfen. Insbesondere Parameter, die voreingestellt sind und vom Benutzer nicht geändert werden können (d. h. versteckte Formularfelder), müssen nicht in das Formular eingebettet werden, wenn sie nicht wirklich erforderlich sind. Stattdessen könnte man sie in einer Container in der Sitzung und nur über ein verborgenes Feld auf diesen Container verweisen. Wenn dies keine Option ist, stellen Sie sicher, dass Sie zumindest jeden Integritätsfehler erkennen können, indem Sie die voreingestellten Werte mit einem MAC .
Ein weiteres Problem ist, dass die Formularparameter, die für eine erfolgreiche Formularübermittlung gesendet werden müssen, ziemlich vorhersehbar sind, so dass ein Angreifer wiederholt gültige Formularübermittlungen senden könnte. Wenn Sie einen nicht vorhersehbaren Parameter verlangen würden, der nur von Ihrem Server ausgegeben werden kann und bei der Übermittlung des Formulars validiert wird, könnten Sie überprüfen, ob die Übermittlung des Formulars zulässig ist.
Eine Lösung wäre die Verwendung eines zufälligen Einmal-Tokens, das bei einer Formularanforderung generiert und in der Sitzung gespeichert sowie als verstecktes Eingabefeld in das Formular eingefügt wird. Bei der Übermittlung des Formulars wird dann geprüft, ob ein Token bereitgestellt wurde und ob es mit dem in der Sitzung gespeicherten Token übereinstimmt; wenn dies der Fall ist, wird das Token aus der Sitzung entfernt und das Formular verarbeitet, andernfalls wird die Verarbeitung des Formulars verweigert.
Offen gesagt ist dieser Mechanismus nicht perfekt, da man immer noch zuerst das Formular anfordern und dann gefälschte Formulardaten senden könnte. In diesem Fall könnten Sie zusätzliche Captchas oder andere Mechanismen verwenden, die automatische Anfragen verhindern.
Am besten wäre eine Kombination aus allen oben genannten Maßnahmen:
- einen Formularcontainer in der Sitzung mit einer hinreichend zufälligen Kennung erstellen; diese Kennung als verstecktes Eingabefeld in das Formular einfügen, um den Formularcontainer beim Absenden des Formulars zu identifizieren
- alle voreingestellten Parameter im Formularcontainer statt im Formular zu speichern
- wenn voreingestellte Parameter nicht aus dem Formular ausgeschlossen werden können, authentifizieren Sie ihren Wert mit einem MAC (verwenden Sie einen Containerschlüssel pro Formular)
- bei verdächtig wiederholten Formularanfragen/Formularübermittlungen sollten Sie darüber nachdenken, zusätzlich Captchas einzusetzen, um automatische Anfragen zu verhindern
Außerdem verhindern diese sitzungsbasierten Formularcontainer auch CSRF da ihre Identifikatoren für einen angreifenden Dritten unvorhersehbar sind.
- See previous answers
- Weitere Antworten anzeigen