2016-03-24 12 views
3

Ich versuche zu verhindern, dass Bots (möglicherweise) falsche Daten in meine php-Registrierungsdatei einreichen. Ich erstelle eine Website, die ein Anmelde-/Anmeldesystem verwendet, und ich möchte eine E-Mail-Bestätigung hinzufügen, zu der ich fähig bin. Das Problem ist jedoch, dass mein Webhost nur x E-Mail-Anzahl pro Minute erlaubt, wenn ein Bot spamte, wird nicht nur meine Datenbank mit Spam-Accounts gefüllt, sondern ich werde auch für das Brechen des E-Mail-Limits suspendiert.Unterstützt die Verwendung von CSRF-Formtoken die Spam-Prävention?

Ich habe über Sicherungsformulare und CSRF gelesen, ein Begriff, den ich nicht kenne.

Dies ist mein derzeitiges Verständnis der "Token-Methode" der CSRF-Prävention;

  • Wenn die Seite mit dem Formular geladen ist, erstellen Sie ein Token. Speichern Sie das Token in einem SESSION oder Cookie.

  • Wenn die PHP-Datei, die die Registrierung behandelt, ausgeführt wird, wird nach dem Token gesucht. Wenn der im Formular übermittelte nicht übereinstimmt (oder wenn der Token nicht in SESSION eingestellt ist), ist die Anfrage Spam.

  • Ich verstehe nicht, warum der Bot nicht einfach das Token aus dem HTML-Formular erhalten und übermitteln kann. Ich verstehe, es ändert sich jedes Mal, kann es nicht jedes Mal greifen?

    Ich nehme an, der Bot würde nur die Daten mit Curl oder etwas der Art übermitteln, um die Notwendigkeit zu umgehen, das HTML-Formular tatsächlich zu übermitteln und stattdessen die Daten direkt an die PHP-Datei zu senden.

    Meine Frage ist im Wesentlichen, warum und wie verhindert diese Methode gegen Bots mein Anmeldeformular (oder irgendeine Form für diese Angelegenheit).

    +0

    Spam ist sehr häufig und es gibt eine Reihe von verschiedenen Möglichkeiten zur Verhinderung und Sicherung unserer Website gegen Bots. Verwenden Sie in Ihrem Login-Formular Throttling usw. Sie können Googles reCaptcha verwenden, was sehr nützlich ist. Überprüfen Sie es hier. https://www.google.com/recaptcha/intro/index.html –

    Antwort

    3

    Meine Frage ist im Wesentlichen, warum und wie verhindert diese Methode gegen Bots mein Anmeldeformular (oder irgendeine Form für diese Angelegenheit) zu übermitteln.

    Es tut es nicht.

    CSRF steht für „Cross-Site Request Forgery“ und solche Tokens zu verhindern, genau das - ein Benutzer in ein Formular abzuschicken von einen anderen Seite zu Ihnen ausgetrickst, die nichts mit Spam zu tun hat.

    Für Spam-Schutz sollten Sie eine CAPTCHA-Herausforderung in irgendeiner Form verwenden.

    +0

    Ich war unter dem Eindruck, dass Captchas nicht effektiv waren. Trotzdem, wie hält das den Bot davon ab, ihn direkt an PHP zu übergeben, ohne das HTML-Formular und den darin enthaltenen Captcha-Code zu verwenden? – Harry

    +0

    CAPTCHAs arbeiten, indem sie hart (hoffentlich unmöglich) sind, von einer Maschine gelesen zu werden - es ist kein einfaches Formularfeld, aber normalerweise ein Bild oder ein Ton, der gespielt wird, damit ein Mensch es verstehen kann, während ein Algorithmus es nicht würde. – Narf

    +0

    Okay, das erklärt immer noch nicht, warum der Bot das Formular, das das Captcha enthält, abschicken muss, anstatt es komplett zu überspringen und die Anfrage direkt an die PHP-Datei zu senden (die das Formular nicht enthält). – Harry

    1

    CSRF steht für Cross Site Request Forgery das ist NICHT ein Verfahren einen Roboter von der Abgabe Formen zu verhindern, ist dies ein Mittel ist von übermittelten Daten zu einer bestehenden Sitzung auf einem anderen Tab zusätzlichen Browser-Tabs zu verhindern.

    Nehmen Sie Facebook, die meisten Leute sind immer angemeldet, wenn ein anderer Tab ein Statusupdate an Ihre Wand senden könnte, indem Sie einfach eine Zeichenfolge an den Endpunkt senden, Sie sind bereits angemeldet und werden autorisiert und gepostet.

    Wo als CSRF verhindert, dass Registerkarten dies tun, da es keine Möglichkeit gibt, Ihr Token von einer vorhandenen Registerkarte abzurufen. Das Token muss nur einmal pro Sitzung generiert werden und für jede Sitzung eindeutig sein (obwohl es häufig geändert wird, macht es sicherer).

    Sie müssen eine CAPTCHA verwenden.

    6

    Unterstützt die Verwendung von CSRF-Formtoken die Spam-Prävention?

    Etwas, ja. Nicht durch Design, sondern weil es den Arbeitsaufwand beim Schreiben eines Bots etwas höher macht und Bot-Autoren faul sind.

    Ich verstehe nicht, warum der Bot kann nicht einfach das Token aus dem HTML-Formular erhalten und legt er

    Sicher, einen Bot, die speziell geschrieben wird Ihr Anmeldeformular zum Ziel wird das tun, . Und ein Bot, der als kopfloser Webbrowser implementiert ist, wird dies automatisch tun, nur weil das ein echter Browser wäre.

    Die Bots, die Sie mit einem CSRF-Token stoppen, sind die dümmeren Bots, die nur Müll in jede Form-Aktions-URL pumpen, die ihre Scraper finden, einreichen und ohne zu sehen, was die Antwort war. Kommentar-Spammer sind oft so dumm.