Ich versuche, einen ausreichend guten Anti-Spam-Mechanismus zu entwickeln, um automatisch generierte Eingaben zu verhindern. Ich habe gelesen, dass Techniken wie Captcha, 1 + 1 =? Sachen funktionieren gut, aber sie stellen auch einen zusätzlichen Schritt dar, der die kostenlose schnelle Nutzung der Anwendung behindert (ich suche bitte nicht nach so etwas).
Ich habe versucht, einige versteckte Felder in allen meinen Formularen display: none;
festzulegen. Ich bin jedoch sicher, dass ein Skript so konfiguriert werden kann, dass diese Formularfeld-ID verfolgt und einfach nicht ausgefüllt wird.
Implementieren / kennen Sie eine gute Methode gegen Roboter zum automatischen Ausfüllen von Formularen? Gibt es etwas, das nahtlos mit der serverseitigen Verarbeitung von HTML UND / ODER funktioniert und (fast) kugelsicher ist? (Ohne JS könnte man es einfach deaktivieren).
Ich versuche, mich dabei nicht auf Sitzungen zu verlassen (dh zu zählen, wie oft auf eine Schaltfläche geklickt wird, um Überlastungen zu vermeiden).
Antworten:
Eine einfach zu implementierende, aber nicht narrensichere Methode (insbesondere bei "bestimmten" Angriffen) zur Lösung von Anti-Spam besteht darin, die Zeit zwischen dem Senden des Formulars und dem Laden der Seite zu verfolgen.
Bots fordern eine Seite an, analysieren die Seite und senden das Formular. Das geht schnell.
Menschen geben eine URL ein, laden die Seite, warten, bis die Seite vollständig geladen ist, scrollen nach unten, lesen den Inhalt, entscheiden, ob sie das Formular kommentieren / ausfüllen möchten, benötigen Zeit, um das Formular auszufüllen, und senden es ab.
Der Zeitunterschied kann subtil sein; und wie diese Zeit ohne Cookies verfolgt werden kann, erfordert eine Art serverseitige Datenbank. Dies kann sich auf die Leistung auswirken.
Außerdem müssen Sie die Schwellenzeit anpassen.
quelle
Ich finde tatsächlich, dass ein einfaches Honigtopffeld gut funktioniert. Die meisten Bots füllen jedes Formularfeld aus, in der Hoffnung, die erforderlichen Feldvalidatoren zu umgehen.
http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx
Wenn Sie ein Textfeld erstellen, es in Javascript ausblenden und dann sicherstellen, dass der Wert auf dem Server leer ist , werden 99% der Roboter dort draußen ausgesondert und 99% Ihrer Benutzer werden überhaupt nicht frustriert. Bei den verbleibenden 1%, für die Javascript deaktiviert ist, wird weiterhin das Textfeld angezeigt. Sie können jedoch in solchen Fällen eine Meldung wie "Dieses Feld leer lassen" hinzufügen (wenn Sie sich überhaupt um sie kümmern).
(Wenn Sie auf dem Feld style = "display: none" ausführen, ist es für einen Roboter viel zu einfach, dies nur zu sehen und das Feld zu verwerfen, weshalb ich den Javascript-Ansatz bevorzuge.)
quelle
Was ist, wenn - der Bot überhaupt keine findet
form
?3 Beispiele:
Erstellen Sie ein
form.html
und platzieren Sie esform
in einem<div id="formContainer">
Element.Verwenden Sie auf der Seite, auf der Sie dieses Formular aufrufen müssen, eine leere
<div id="dynamicForm"></div>
und diese jQuery:$("#dynamicForm").load("form.html #formContainer");
$_POST["email"]
leer sein sollte (ohne Wert)! Andernfalls senden Sie das Formular nicht ab.<input name="sender" type="text" placeholder="Your email">
nach (!) Der "Bot-Bait" -Eingabe für die tatsächliche Benutzer-E-Mail-Adresse.Danksagung:
Developer.Mozilla - Deaktivieren der automatischen Vervollständigung von Formularen
StackOverflow - Ignorieren von Tabindex
quelle
autocomplete=nope
, standardmäßig würdeon
;-) MDN: Eingabe # attr-autocompleteautocomplete="oh sunny day"
für diese Angelegenheit schreiben .Was ich getan habe, ist, ein verstecktes Feld zu verwenden und den Zeitstempel darauf zu setzen und ihn dann mit dem Zeitstempel auf dem Server unter Verwendung von PHP zu vergleichen.
Wenn es schneller als 15 Sekunden war (abhängig davon, wie groß oder klein Ihre Formulare sind), war das ein Bot.
Ich hoffe das hilft
quelle
$.post
Senden und sendet alles an eine externe PHP-Datei. 3) in externem PHP wieder Serverzeit bekommen und mit Sitzungszeit vergleichen?Eine sehr effektive Möglichkeit, Spam praktisch zu beseitigen, besteht darin, ein Textfeld mit Text zu erstellen, z. B. "Diesen Text entfernen, um das Formular zu senden!". und dieser Text muss entfernt werden, um das Formular einzureichen.
Wenn das Textfeld bei der Formularüberprüfung den Originaltext oder einen beliebigen zufälligen Text enthält, senden Sie das Formular nicht ab. Bots können Formularnamen lesen und automatisch die Felder Name und E-Mail ausfüllen, wissen jedoch nicht, ob sie tatsächlich Text aus einem bestimmten Feld entfernen müssen, um ihn zu senden.
Ich habe diese Methode auf unserer Unternehmenswebsite implementiert und den Spam, den wir täglich erhielten, vollständig beseitigt. Es funktioniert wirklich!
quelle
Wie wäre es, wenn Sie ein Textfeld-Eingabefeld in derselben Farbe wie der Hintergrund erstellen, das leer bleiben muss. Dies umgeht das Problem einer Bot-Leseanzeige: keine
quelle
http://recaptcha.net/reCAPTCHA ist ein kostenloser Antibot-Service, der bei der Digitalisierung von Büchern hilft
Es wurde von Google erworben (im Jahr 2009):
Siehe auch
quelle
Viele dieser Spam-Bots sind nur serverseitige Skripte, die das Web durchsuchen. Sie können viele von ihnen bekämpfen, indem Sie die Formularanforderung vor dem Senden mit Javascript bearbeiten (dh ein zusätzliches Feld basierend auf einer Clientvariablen festlegen). Dies ist keine vollständige Lösung und kann zu vielen Problemen führen (z. B. Benutzer ohne Javascript, auf Mobilgeräten usw.), kann jedoch Teil Ihres Angriffsplans sein.
Hier ist ein triviales Beispiel ...
Irgendwo in Ihrem PHP-Skript ...
Außerdem sind Captchas großartig und wirklich die beste Verteidigung gegen Spam.
quelle
Ich bin überrascht, dass noch niemand diese Methode erwähnt hat:
Vorteile:
Nachteile:
Diese Methode wird beispielsweise vom WordPress-Plugin Cookies for Comments verwendet .
quelle
Mit dem Aufkommen von kopflosen Browsern (wie Phantomjs), die alles emulieren können, können Sie nicht annehmen, dass:
Wenn das früher wahr war, ist es nicht mehr wahr.
Wenn Sie keine benutzerfreundliche Lösung suchen, geben Sie ihnen einfach einen schönen "Ich bin ein Spammer" -Sendungsknopf :
Natürlich können Sie mit zwei
input[type=image]
Bildschaltflächen spielen und die Reihenfolge nach jedem Laden, die Textalternativen, den Inhalt der Bilder (und ihre Größe) oder diename
der Schaltflächen ändern . Dies erfordert einige Serverarbeit.Aus Gründen der Barrierefreiheit müssen Sie eine korrekte Textalternative angeben, aber ich denke, dass ein langer Satz für Screenreader-Benutzer besser ist, als als Bot betrachtet zu werden.
Zusätzlicher Hinweis: Diese Beispiele veranschaulichen, dass das Verstehen von Englisch (oder einer beliebigen Sprache) und das Treffen einer einfachen Wahl für einen Spambot schwieriger ist als: 10 Sekunden warten, mit CSS oder Javascript umgehen, wissen, dass ein Feld ausgeblendet ist, Mausbewegung emulieren oder Emulieren der Tastatureingabe, ...
quelle
Eine sehr einfache Möglichkeit besteht darin, einige Felder bereitzustellen
<textarea style="display:none;" name="input"></textarea>
und alle Antworten, die dies ausgefüllt haben, zu verwerfen.Ein anderer Ansatz besteht darin, das gesamte Formular (oder nur die Feldnamen) mit Javascript zu generieren. Nur wenige Bots können es ausführen.
Wie auch immer, Sie werden nicht viel gegen lebende "Bots" aus Taiwan oder Indien tun, die 0,03 US-Dollar pro gepostetem Link erhalten, und ihren Lebensunterhalt auf diese Weise verdienen.
quelle
Ich habe einen einfachen Ansatz zum Stoppen von Spammern, der zumindest meiner Erfahrung nach 100% effektiv ist und die Verwendung von reCAPTCHA und ähnlichen Ansätzen vermeidet. Nachdem ich diesen Ansatz implementiert hatte, ging ich in den letzten 5 Jahren von fast 100 Spam pro Tag auf einem der HTML-Formulare meiner Website auf Null.
Es nutzt die E-Mail-ALIAS-Funktionen der meisten HTML-Skripts für die Formularverarbeitung (ich verwende FormMail.pl) sowie einen grafischen Übermittlungscode, der in den einfachsten Grafikprogrammen einfach erstellt werden kann. Eine solche Grafik enthält den Code M19P17nH und die Aufforderung "Bitte geben Sie den Code links ein".
In diesem Beispiel wird eine zufällige Folge von Buchstaben und Zahlen verwendet, aber ich verwende in der Regel nicht englische Versionen von Wörtern, die meinen Besuchern bekannt sind (z. B. "pnofrtay"). Beachten Sie, dass die Eingabeaufforderung für das Formularfeld in die Grafik integriert ist und nicht im Formular angezeigt wird. Für einen Roboter gibt dieses Formularfeld also keinen Hinweis auf seinen Zweck.
Der einzige wirkliche Trick besteht darin, sicherzustellen, dass Ihr Formular-HTML diesen Code der Variablen "Empfänger" zuweist. Stellen Sie dann in Ihrem E-Mail-Programm sicher, dass jeder von Ihnen verwendete Code als E-Mail-Alias festgelegt ist, der auf die E-Mail-Adressen verweist, die Sie verwenden möchten. Da das Formular keinerlei Aufforderung zum Lesen durch einen Roboter und keine E-Mail-Adressen enthält, hat er keine Ahnung, was in das leere Formularfeld eingefügt werden soll. Wenn nichts in das Formularfeld oder etwas anderes als akzeptable Codes eingefügt wird, schlägt die Formularübermittlung mit einem Fehler "Schlechter Empfänger" fehl. Sie können eine andere Grafik für verschiedene Formulare verwenden, obwohl dies meiner Erfahrung nach nicht unbedingt erforderlich ist.
Natürlich kann ein Mensch dieses Problem blitzschnell lösen, ohne alle Probleme, die mit reCAPTCHA und ähnlichen, eleganteren Schemata verbunden sind. Wenn ein menschlicher Spammer auf den Empfängerfehler reagiert und den Bildcode in den Roboter programmiert, können Sie ihn leicht ändern, sobald Sie feststellen, dass der Roboter für die Reaktion fest codiert wurde. In fünf Jahren, in denen ich diesen Ansatz verwendet habe, hatte ich noch nie Spam von einem der Formulare, auf denen ich ihn verwende, und ich hatte noch nie eine Beschwerde von einem menschlichen Benutzer der Formulare. Ich bin mir sicher, dass dies mit OCR-Funktionen im Roboter übertroffen werden kann, aber ich habe es noch nie auf einer meiner Websites erlebt, die HTML-Formulare verwenden. Ich habe auch "Spam-Traps" (versteckter HTML-Code "Komm her", der auf meine Anti-Spam-Richtlinien verweist) mit gutem Effekt verwendet, aber sie waren nur zu etwa 90% wirksam.
quelle
Ich denke hier an viele Dinge:
quelle
Eine andere Möglichkeit, anstatt wie bei vielen Websites zufällige Buchstaben und Zahlen zu machen, besteht darin, zufällige Bilder von erkennbaren Objekten zu machen. Bitten Sie den Benutzer dann, entweder die Farbe des Bilds oder das Objekt selbst einzugeben.
Alles in allem wird jede Lösung ihre Vor- und Nachteile haben. Sie müssen einen glücklichen Median zwischen zu schwer für Benutzer, um den Antispam-Mechanismus zu passieren, und der Anzahl der Spam-Bots finden, die durchkommen können.
quelle
Roboter können kein JavaScript ausführen. Sie können also beispielsweise ein verstecktes Element mit JavaScript in die Seite einfügen und dann vor dem Senden des Formulars feststellen, ob es vorhanden ist. Beachten Sie jedoch, dass bei einigen Benutzern auch JavaScript deaktiviert ist
Andernfalls werden Sie meiner Meinung nach gezwungen sein, eine Form des Kundenbeweises für "Menschlichkeit" zu verwenden.
quelle
Die beste Lösung, die ich gefunden habe, um zu vermeiden, dass Bots Spam versenden, ist die Verwendung einer sehr trivialen Frage oder eines Feldes in Ihrem Formular.
Versuchen Sie, ein Feld wie das folgende hinzuzufügen:
Diese Tricks erfordern, dass der Benutzer versteht, was in das Formular eingegeben werden muss, was es viel schwieriger macht, das Ziel des massiven Ausfüllens von Bot-Formularen zu sein.
BEARBEITEN
Die Rückseite dieser Methode ist, wie Sie in Ihrer Frage angegeben haben, der zusätzliche Schritt für den Benutzer, um sein Formular zu validieren. Aber meiner Meinung nach ist es viel einfacher als ein Captcha und der Aufwand beim Ausfüllen des Formulars beträgt nicht mehr als 5 Sekunden, was aus Anwendersicht akzeptabel erscheint.
quelle
Ein Tutorial dazu finden Sie auf der JQuery-Site. Obwohl es sich um JQuery handelt, ist die Idee rahmenunabhängig.
Wenn JavaScript nicht verfügbar ist, müssen Sie möglicherweise auf den CAPTCHA-Ansatz zurückgreifen.
quelle
Der einfache Weg, dies zu tun, besteht darin, ein Feld mit einem Wert einzufügen und den Benutzer zu bitten, den Text in diesem Feld zu entfernen. da Bots sie nur füllen. Wenn das Feld nicht leer ist, bedeutet dies, dass der Benutzer kein Mensch ist und nicht veröffentlicht wird. Es ist der gleiche Zweck eines Captcha-Codes.
quelle
Es ist nur eine Idee, die ich in meiner Anwendung verwendet habe und die gut funktioniert
Sie können ein Cookie bei Mausbewegung mit Javascript oder jquery erstellen und auf der Serverseite prüfen, ob ein Cookie vorhanden ist, da nur Menschen eine Maus haben. Ein Cookie kann nur von ihnen erstellt werden. Das Cookie kann ein Zeitstempel oder ein Token sein, das validiert werden kann
quelle
Verwenden Sie 1) Formular mit Token 2) Überprüfen Sie das Formular, um eine Verzögerung mit der IP-Adresse zu bilden. 3) Blockieren Sie die IP (optional).
quelle
Nach meiner Erfahrung benötigen Sie keine besonderen Maßnahmen, wenn das Formular nur ein "Kontakt" -Formular ist. Spam wird von Webmail-Diensten anständig gefiltert (Sie können Webformular-Anfragen über Server-Skripte verfolgen, um zu sehen, wie effektiv Ihre E-Mail erreicht wird. Ich gehe natürlich davon aus, dass Sie einen guten Webmail-Dienst haben: D)
Ich denke nicht, dass das gut ist. In der Tat möchte ich E-Mails von Benutzern erhalten, die bestimmte Aktionen ausführen, da dies die Benutzer sind, an denen ich interessiert bin (z. B. Benutzer, die sich die Seite "Lebenslauf" angesehen und den richtigen Kontakt verwendet haben bilden). Wenn der Benutzer also etwas tut, das ich möchte, beginne ich, seine Sitzung zu verfolgen und ein Cookie zu setzen (ich setze immer ein Sitzungscookie, aber wenn ich keine Sitzung starte, ist es nur ein gefälschtes Cookie, das gemacht wird, um zu glauben, dass der Benutzer eine Sitzung hat). Wenn der Benutzer etwas Unerwünschtes tut, kümmere ich mich nicht darum, eine Sitzung für ihn zu führen, damit keine Überlastung usw. auftritt.
Es wäre auch schön für mich, wenn Werbedienste eine Art API anbieten (die möglicherweise bereits vorhanden ist), um zu sehen, ob der Nutzer "die Anzeige angesehen" hat. Es ist wahrscheinlich, dass Nutzer, die Anzeigen betrachten, echte Nutzer sind, aber wenn dies nicht der Fall ist Wirklich gut, zumindest bekommst du sowieso 1 Ansicht, also nichts zu verlieren. (Und glauben Sie mir, die Anzeigensteuerung ist ausgefeilter als alles, was Sie alleine tun können.)
quelle
Eigentlich die Falle mit Display: Keine wirkt wie ein Zauber. Es ist hilfreich, die CSS-Deklaration in eine Datei zu verschieben, die globale Stylesheets enthält, wodurch Spam-Bots gezwungen werden, diese ebenfalls zu laden (eine direkte style = "display: none;" - Deklaration könnte wahrscheinlich von einem Spam-Bot interpretiert werden, ebenso wie a lokale Stildeklaration im Dokument selbst).
In Kombination mit anderen Gegenmaßnahmen sollte es für Spam-Bots schwierig sein, ihren Müll zu entladen (ich habe ein Gästebuch mit einer Vielzahl von Maßnahmen gesichert, und bisher sind sie auf meine primären Fallen hereingefallen - sollte jedoch ein Bot diese dort umgehen sind andere bereit auszulösen).
Was ich verwende, ist eine Kombination aus gefälschten Formularfeldern (auch als ungültige Felder bezeichnet, falls ein Browser verwendet wird, der CSS im Allgemeinen nicht verarbeitet oder anzeigt: keine im Besonderen), Überprüfung der Integrität (dh das Format der Eingabe) gültig?), Zeitstempel (sowohl zu schnelle als auch zu langsame Übermittlungen), MySQL (zur Implementierung von Blacklists basierend auf E-Mail- und IP-Adressen sowie Flutfiltern), DNSBLs (z. B. SBL + XBL von Spamhaus), Textanalyse ( zB Wörter, die ein starkes Indiz für Spam sind) und Bestätigungs-E-Mails (um festzustellen, ob die angegebene E-Mail-Adresse gültig ist oder nicht).
Ein Hinweis zu Bestätigungs-Mails: Dieser Schritt ist völlig optional. Wenn Sie ihn jedoch implementieren möchten, muss dieser Prozess so einfach wie möglich zu bedienen sein (dh er sollte darauf hinauslaufen, auf einen in der E-Mail enthaltenen Link zu klicken ) und veranlassen, dass die betreffende E-Mail-Adresse für einen bestimmten Zeitraum auf die Whitelist gesetzt wird, damit spätere Überprüfungen vermieden werden, falls der Benutzer zusätzliche Beiträge verfassen möchte.
quelle
Ich benutze eine Methode, bei der es ein verstecktes Textfeld gibt. Da Bots die Website analysieren, füllen sie sie wahrscheinlich aus. Dann überprüfe ich, ob es leer ist, wenn es keine Website ist, die zurückkehrt.
E-Mail-Bestätigung hinzufügen. Der Benutzer erhält eine E-Mail und muss auf einen Link klicken. Andernfalls verwerfen Sie den Beitrag in einiger Zeit.
quelle
Ich habe meinen Formularen eine Zeitüberprüfung hinzugefügt. Die Formulare werden nicht gesendet, wenn sie in weniger als 3 Sekunden ausgefüllt wurden. Dies hat für mich besonders bei den langen Formularen hervorragend funktioniert. Hier ist die Formularprüfungsfunktion, die ich über die Schaltfläche "Senden" aufrufe
quelle
Mit immer ausgefeilteren Spam-Bots und Techniken wie automatisierten Browsern wird es schwieriger, die Spam-Quelle zu bestimmen. Unabhängig davon, ob es sich um Software, einen Menschen oder beides handelt, ist Spam aufgrund seines Inhalts Spam. Ich denke, die beste Lösung besteht darin, den veröffentlichten Inhalt über eine Anti-Spam-API wie Cleantalk oder Akismet auszuführen. Es ist relativ billig und effektiv und belästigt den Benutzer nicht. Sie können die Übermittlungszeiten von Formularen und die anderen herkömmlichen Überprüfungen auf weniger anspruchsvolle Bots überprüfen, bevor Sie die API aufrufen.
quelle
Sie können versuchen, Spam-Roboter zu betrügen, indem Sie nach der Javascript-Validierung die richtige Aktion atribute hinzufügen. Wenn der Roboter Javascript blockiert, kann er das Formular niemals korrekt senden.
HTML
JAVASCRIPT
Ich füge dann nach .attr () einen "Rückruf" hinzu, um Fehler zu vermeiden.
quelle
Nur meine fünf Cent wert. Wenn das Ziel darin besteht, 99% der Roboter zu stoppen, was ziemlich gut klingt, und wenn 99% der Roboter kein Java-Skript ausführen können, ist die beste Lösung, die alles übertrifft, einfach, kein Formular zu verwenden, mit dem eine Aktion zum Senden gesendet wird eine Post-URL.
Wenn das Formular über ein Java-Skript gesteuert wird und das Java-Skript die Formulardaten sammelt und dann über eine HTTP-Anforderung sendet, kann kein Roboter das Formular senden. Da die Senden-Schaltfläche Java-Skript verwenden würde, um den Code auszuführen, der das Formular sendet.
quelle