Erstellen eines einfachen Honeypots zum Schutz Ihrer Formulare vor Spammern
Ich denke, dieser Beitrag wird kurz und nützlich sein. Das Ziel ist es, eine einfache Technik zu demonstrieren, die Ihnen hilft, Spammer und Bots zu blockieren, die Ihre Website-Formulare angreifen könnten. Dies soll eine zusätzliche Schicht in der Spam-Prävention, nicht die wichtigste Ressource zu sein. Verwenden Sie es mit anderen Tools wie re, etc. Aufgrund seiner Einfachheit empfehle ich Ihnen wirklich, dieses Formularmuster zu befolgen, also, lassen Sie uns kodieren:
Stellen Sie sich vor, Sie haben die folgende Formularstruktur:
<form action="/myformaction"> <label for="name">Your Name</label> <input type="text" name="name" placeholder="Your name here" required maxlength="100"> <label for="email">Your E-mail</label> <input type="email" name="email" placeholder="Your e-mail here" required></form>
Die meisten einfachen Bots suchen in Formularen nach allgemeinen Mustern, wie z.B. gemeinsame Namen von Labels, Eingabe-IDs, gemeinsame Eingabeattribute, erforderliche Felder usw., und dann füllt der Bot sie mit gefälschten Informationen, um zu versuchen, Ihnen und Ihren Kunden Spam oder bösartigen Code zu senden. Die am häufigsten zu durchsuchenden Felder sind Felder mit Namen wie „E-Mail, Telefon, Adresse“…
So, lassen Sie uns also schummeln und einen einfachen Honeypot erstellen, indem wir unsere Formularstruktur ändern:
<style> .ohnohoney{ opacity: 0; position: absolute; top: 0; left: 0; height: 0; width: 0; z-index: -1; }</style><form action="/myformaction"> <!-- Real fields --> <label for="nameaksljf">Your Name</label> <input type="text" name="nameksljf" placeholder="Your name here" required maxlength="100"> <label for="emaillkjkl">Your E-mail</label> <input type="text" name="emaillkjkl" placeholder="Your e-mail here" required> <!-- H o n e y p o t --> <label class="ohnohoney" for="name"></label> <input class="ohnohoney" autocomplete="off" type="text" name="name" placeholder="Your name here"> <label class="ohnohoney" for="email"></label> <input class="ohnohoney" autocomplete="off" type="email" name="email" placeholder="Your e-mail here"></form>
Lassen Sie uns die Änderungen sehen:
Zuerst haben wir eine Klasse erstellt, um Dinge zu verstecken. Die Klasse .ohnohoney. Es ist wichtig, auf einige Dinge hinzuweisen:
-
Nicht display:none verwenden, einige Bots können nicht auf Felder mit display none zugreifen, andere wissen einfach, dass sie die Felder mit display none nicht ausfüllen sollen. Verwenden Sie nicht „hidden“ im Klassennamen, einige fortgeschrittene Bots können es erkennen.
-
Dann haben wir die „echten Felder“ erstellt. Das sind die sichtbaren Felder und diejenigen, die für Ihr Backend in Bezug auf Daten relevant sein müssen. Bei diesen Feldern müssen die Bezeichnungen in Hashes geändert werden. Im Allgemeinen verwende ich das Muster „nameHASH“. Verwenden Sie nicht „name-hash“ oder Variationen davon, ein einfacher Split würde den echten Feldnamen offenlegen. Nun kann ein Bot nicht erkennen, was diese Felder sind, er weiß nur, dass das Formular einige Felder hat, die ausgefüllt werden müssen, vielleicht nach dem Muster „type“.
-
Durch die Erstellung der „h o n e y p o t“-Felder werden wir in der Lage sein, den Spammer zu identifizieren. Wichtig zu: Lassen Sie das Etikett leer, verwenden Sie Ihre „ohnohoney“-Klasse, um all diese Fake-Eingaben zu verstecken. Gestalten Sie Ihre gefälschten Eingaben so einfach, generisch und attraktiv wie möglich. Verwenden Sie einfache und gebräuchliche Namen wie „email, phone, name, etc“, deaktivieren Sie die Autovervollständigung (damit der Browser sie nicht ausfüllt), deaktivieren Sie die Regeln, aber behalten Sie die Typen bei.
Nun haben wir 2 Teile in unserem Formular: Echte Felder mit unseren Eingaben, die durch Hashes und seltsame Namen geschützt sind (Sie können den Hash oder die seltsamen Namen implementieren, wie Sie wollen). Und unser Honeypot (schreiben Sie nicht „Honeypot“, sondern trennen Sie die Buchstaben, um eine Erkennung zu vermeiden). Jetzt in Ihrem Backend:
- Überprüfen Sie, ob eines der „h o n e y p o t“-Felder ausgefüllt wurde. Wenn ja, herzlichen Glückwunsch, Sie haben eine Spam-Mail gefangen. Die meisten von ihnen füllen alle diese Felder aus, ohne sie zu unterscheiden. Sie müssen also nur überprüfen, ob eines Ihrer „H o n e y p o t“-Felder ausgefüllt wurde, und wenn ja, handelt es sich um eine Spam-Mail. Wenn Sie es vorziehen, können Sie diese Prüfung auf dem Client durchführen, wenn es sich um ein Ajax-Formular handelt. Dadurch wird vermieden, dass Server-Ressourcen für die Berechnung unbrauchbarer Daten verwendet werden (aber die Backend-Validierung bleibt trotzdem erhalten). Wenn Sie einen Spam abfangen, senden Sie die Daten einfach nicht und machen Sie damit, was Sie wollen. Wenn Namen wie „email, phone, etc“ für Ihr Backend wichtig sind, schreiben Sie die Namen einfach mit Arrays um.
Hier ist ein Single-File Repo mit einer einfachen Implementierung dieser Technik:
https://github.com/felippe-regazio/php-honeypot-example
Erinnern Sie sich: dies ist nur eine einfache Schicht, um Angriffe auf einfache Weise zu verhindern, einige Technologien können sogar dieses Muster identifizieren, also nutzen Sie alle Waffen, die Sie dagegen einsetzen können. Aber ich glaube, dass dieses einfache Muster mindestens 50% der Spams auf Ihrer Webseite verhindern kann.