it-swarm.com.de

Unterbinden der Bot-Formularübergabe

Ich versuche, einen guten Weg zu finden, um zu verhindern, dass Bots mein Formular absenden, während der Prozess einfach bleibt. Ich habe einige großartige Ideen gelesen, aber ich habe darüber nachgedacht, eine Bestätigungsoption hinzuzufügen, wenn das Formular gesendet wird. Der Benutzer klickt auf "Senden" und ein Javascript bestätigt, dass "Prompt" angezeigt wird, was eine Benutzerinteraktion erfordert.

Würde dies Bots verhindern oder könnte ein Bot das zu einfach herausfinden? Hier ist der Code und JSFIddle, um meine Idee zu demonstrieren:

JSFIDDLE

$('button').click(function () {
  if(Confirm()) {
    alert('Form submitted');
    /* perform a $.post() to php */
  }
  else {
    alert('Form not submitted');
  }
});

function Confirm() {
  var _question = confirm('Are you sure about this?');
  var _response = (_question) ? true : false;
  return _response;
}
22
Mike

Dies ist ein Problem, auf das viele Menschen gestoßen sind. Wie user166390 in den Kommentaren ausführt, kann der Bot einfach Informationen direkt an den Server senden und dabei das Javascript umgehen (siehe einfache Hilfsprogramme wie cURL und Postman ). Viele Bots können jetzt Javascript konsumieren und damit interagieren. Hari krishnan weist auf die Verwendung von captcha hin, wobei reCaptcha meines Wissens die am weitesten verbreitete und erfolgreichste ist. Aber Captchas haben ihre Probleme und werden vom World-Wide-Web-Kompendium entmutigt, hauptsächlich aus nwirksamkeit und Unzugänglichkeit .

Und damit wir nicht vergessen, kann ein Angreifer immer menschliche Intelligenz einsetzen, um ein Captcha zu besiegen. Es gibt Geschichten von Angreifern, die dafür bezahlen, dass Leute Captchas für Spam-Zwecke knacken, ohne dass die Arbeiter bemerken, dass sie an illegalen Aktivitäten teilnehmen. Amazon bietet einen Dienst namens Mechanical Turk an, der solche Probleme löst. Amazon würde energisch widersprechen, wenn Sie ihren Dienst für böswillige Zwecke nutzen würden, und es hat den Nachteil, dass es Geld kostet und eine Papierspur erstellt. Es gibt jedoch mehrerhmAnbieter, die keine derartigen Einwände hegen würden.

Also, was kannst du machen?

Mein Lieblingsmechanismus ist ein verstecktes Kontrollkästchen. Machen Sie es mit einem Etikett wie "Stimmen Sie den Nutzungsbedingungen unserer Dienste zu?" vielleicht sogar mit einem Link zu ernsthaft aussehenden Begriffen. Sie deaktivieren es jedoch standardmäßig und blenden es durch CSS aus: Positionieren Sie es außerhalb der Seite, legen Sie es in einen Container mit einer Höhe von null oder einer Breite von null und positionieren Sie ein Div mit einem höheren Z-Index darüber. Rollen Sie Ihren eigenen Mechanismus hier und seien Sie kreativ.

Das Geheimnis ist, dass kein Mensch das Kontrollkästchen sehen wird, aberdie meistenBots füllen Formulare aus, indem sie die Seite inspizieren und direkt bearbeiten, nicht durch tatsächliche Sicht. Daher können Sie in jedem Formular, das mit diesem Kontrollkästchen-Wertesatz geliefert wird, erkennen, dass es nicht von einem Menschen ausgefüllt wurde. Diese Technik nennt man bot trap . Die Faustregel für die Art der Bots zum automatischen Ausfüllen von Formularen lautet: Wenn ein Mensch eingreifen muss, um eine einzelne Site zu überwinden, hat er das gesamte Geld (in Form seiner Zeit) verloren, das er durch die Verbreitung seiner Bots verdient hätte Spam-Werbung.

(Die vorige Faustregel geht davon aus, dass Sie ein Forum oder ein Kommentarformular schützen. Wenn aktuelles Geld oder persönliche Informationen in der Leitung sind, benötigen Sie mehr Sicherheit als nur eine Heuristik. Dies ist immer noch Sicherheit durch Unbekanntheit = Es stellt sich nur heraus, dass Dunkelheit ausreicht, um Sie vor zufälligen Angriffen mit Skripten zu schützen. Täuschen Sie sich nicht, dass dies Ihre Website vor allen Angriffen schützt. )

Die andere Hälfte des Geheimnisses ist es, es zu behalten. Ändern Sie die Antwort in keiner Weise, wenn das Kontrollkästchen aktiviert ist. Zeigen Sie die gleiche Bestätigung, danke oder was auch immer Nachricht oder Seite danach. Dadurch wird verhindert, dass der Bot weiß, dass er zurückgewiesen wurde.

Ich bin auch ein Fan der Timing-Methode. Sie müssen es vollständig auf der Serverseite implementieren. Verfolgen Sie die Zeit, zu der die Seite dauerhaft geliefert wurde (im Wesentlichen die Sitzung), und vergleichen Sie sie mit der Zeit, zu der die Formularübermittlung eingegangen ist. Dies verhindert Fälschungen oder lässt den Bot sogar wissen, dass die Zeit abgelaufen ist - wenn Sie die gelieferte Zeit zu einem Teil machen Geben Sie das Formular oder Javascript ein, und teilen Sie ihnen mit, dass Sie mit ihnen in Verbindung stehen.

Verwerfen Sie die Anfrage jedoch einfach stillschweigend, während Sie dieselbe Dankesseite bereitstellen (oder führen Sie eine Verzögerung bei der Beantwortung des Spam-Formulars ein, wenn Sie Rachsucht üben möchten - dies kann möglicherweise nicht verhindern, dass Ihr Server überfordert wird, und kann sogar dazu führen, dass er überfordert wird Sie schneller, indem Sie mehr Verbindungen länger offen halten (zu diesem Zeitpunkt benötigen Sie eine Hardwarelösung, eine Firewall in einem Load-Balancer-Setup).

Es gibt eine Menge Ressourcen, um Serverreaktionen zu verzögern, um Angreifer zu verlangsamen, häufig in Form von Brute-Force-Passwortversuchen. Diese IT-Sicherheitsfrage scheint ein guter Ausgangspunkt zu sein.

Update bezüglich Captcha's

Ich hatte eine Weile darüber nachgedacht, diese Frage zum Thema Computer Vision und Formularübermittlung zu aktualisieren. Kürzlich ist ein Artikel aufgetaucht, der mich auf diesen Blog-Beitrag von Steve Hickson , einen Computer-Vision-Enthusiasten, hinweist. Snapchat (anscheinend eine Social-Media-Plattform? Ich habe sie nie benutzt, weil ich mich jeden Tag älter fühle ...) hat ein neues Captcha-ähnliches System eingeführt, in dem Sie Bilder (Cartoons, wirklich) identifizieren müssen, die einen Geist enthalten. Steve hat bewiesen, dass dies keine Überprüfung des übergebenden Benutzers zulässt, da Computer diese einfache Art von Bild in der Regel besser und schneller identifizieren können.

Es ist nicht schwer vorstellbar, einen ähnlichen Ansatz auf andere Captcha-Typen auszudehnen. Ich habe eine Suche durchgeführt und diese Links auch interessant gefunden:

Ist reCaptcha kaputt?
Praktische, nicht bildbasierte Captchas
Wenn wir wissen, dass CAPTCHA geschlagen werden kann, warum verwenden wir sie dann immer noch?
Gibt es eine echte Alternative zur Verwendung von CAPTCHA-Bildern?
Wie ein Trio von Hackern Googles reCaptcha in die Knie zwang - besonders interessant, weil es um die Audio-Captchas geht.

Oh, und ohne einen obligatorischen XKCD-Comic wären wir kaum vollständig.

63
Patrick M

Heute habe ich ein kontinuierliches Spamming meiner Form erfolgreich beendet. Diese Methode funktioniert natürlich nicht immer, aber sie war einfach und funktionierte in diesem Fall gut. 

Ich habe folgendes gemacht: 

  • Ich setze die Aktionseigenschaft des Formulars auf mustusejavascript.asp , das nur eine Nachricht anzeigt, dass die Übermittlung nicht funktioniert hat und dass der Besucher Javascript aktiviert haben muss.

  • Ich setze die onsubmit -Eigenschaft des Formulars auf eine Javascript-Funktion, die die Aktionseigenschaft des Formulars auf die echte empfangende Seite setzt, z. B. receivemessage.asp

Der fragliche Bot behandelt anscheinend kein Javascript, daher sehe ich keinen Spam mehr davon. Und für einen Menschen (der Javascript aktiviert hat) funktioniert es ohne jegliche Unannehmlichkeiten oder zusätzliche Interaktion. Wenn der Besucher Javascript deaktiviert hat, wird er eine klare Nachricht darüber erhalten, wenn er eine Eingabe vornimmt.

4
Magnus

Ihr Code würde die Bot-Übermittlung nicht verhindern, aber nicht aufgrund des Codes. Der typische Bot da draußen wird eher eine externe/automatisierte POST -Anforderung an die URL (action-Attribut) durchführen. Bei den typischen Bots handelt es sich nicht um das Rendern von HTML, CSS oder JavaScript. Sie lesen den HTML-Code und handeln danach, sodass keine Client-Logik ausgeführt wird. Beim CURLing einer URL wird beispielsweise die Markierung abgerufen, ohne dass JavaScript geladen oder ausgewertet wird. Man könnte ein einfaches Skript erstellen, das nach <form> sucht und dann eine CURL POST für diese URL mit den entsprechenden Schlüsseln ausführt.

Vor diesem Hintergrund ist eine serverseitige Lösung zur Verhinderung der Bot-Übermittlung erforderlich. Captcha + CSRF sollte ausreichen. ( http://en.wikipedia.org/wiki/Cross-site_request_forgery )

3
Matt Lo

Sie können einfach captcha zu Ihrem Formular hinzufügen. Da Captchas different und auch in images sein werden, können Bots dies nicht decode. Dies ist eine der am häufigsten verwendeten Sicherheitsfunktionen für alle Websites ...

2
Hari krishnan

sie können Ihr Ziel mit Javascript nicht erreichen. weil ein Client Ihr Javascript parsen und Ihre Methoden umgehen kann. Sie müssen die Validierung serverseitig über Captchas durchführen. Die Hauptidee ist, dass Sie ein Geheimnis auf dem Server speichern und das vom Client übermittelte Formular mit dem Geheimnis auf dem Server überprüfen.

2
oguzhanyalcin

Nein. Denken Sie immer noch, dass Captcha oder ReCap sicher sind?

Bots nowDays sind intelligent und können Buchstaben auf Bildern leicht erkennen. Verwenden Sie OCR-Tools (suchen Sie nach, um sie zu verstehen)

Ich sage, der beste Weg, um sich selbst vor dem automatischen Senden von Formularen zu schützen, ist das Hinzufügen eines ausgeblendeten Hashs (der auf der Sitzung auf Ihrem Server des aktuellen Clients gespeichert wird), wenn Sie das Formular zum Senden anzeigen. 

Das ist alles, wenn der Bot oder irgendein Zombie das Formular absendet, das Sie prüfen, ob der angegebene Hash dem in der Sitzung gespeicherten Hash entspricht.

weitere Informationen Lesen Sie überCSRF!

2
ucefkh

Sie können die angebotene Registrierungszeit messen, ohne die Ewigkeit in Textfelder ausfüllen zu müssen!

1
Mikatsu

Ich bin auf eine Formulareingangsüberprüfung gestoßen, die die Registrierung programmatischer Eingaben verhindert hat.

Meine anfängliche Taktik bestand darin, das Element zu packen und auf die Option zu setzen, die ich wollte. Ich löste den Fokus auf die Eingabefelder und simulierte Klicks auf jedes Element, um die Dropdown-Menüs anzuzeigen und den Wert festzulegen, der die Ereignisse zum Ändern von Werten auslöst. Als ich jedoch versuchte, die Eingaben zu speichern, wurden sie nicht als geändert registriert.

    ;failed automation attempt because window doesnt register changes.
    ;$iUse = _IEGetObjById($nIE,"InternalUseOnly_id")
    ;_IEAction($iUse,"focus")        
    ;_IEAction($iUse,"click")
    ;_IEFormElementOptionSelect($iUse,1,1,"byIndex")
    ;$iEdit = _IEGetObjById($nIE,"canEdit_id")
    ;_IEAction($iEdit,"focus")
    ;_IEAction($iEdit,"click")
    ;_IEFormElementOptionSelect($iEdit,1,1,"byIndex")
    ;$iTalent = _IEGetObjById($nIE,"TalentReleaseFile_id")
    ;_IEAction($iTalent,"focus")
    ;_IEAction($iTalent,"click")
    ;_IEFormElementOptionSelect($iTalent,2,1,"byIndex")
    ;Sleep(1000)
    ;_IEAction(_IETagNameGetCollection($nIE,"button",1),"click")

Dies veranlasste mich zu einem Umdenken, wie Eingaben eingegeben werden konnten, indem die Mausaktionen direkt manipuliert wurden, um mehr Auswahl mit dem Maustypverhalten zu simulieren. Es ist unnötig zu sagen, dass ich Bilder nicht manuell hochladen muss, um Produktbilder für Unternehmen zu aktualisieren. Windows-Nummer vor Buchstaben verwendet, um mein Skript am Ende des Verzeichnisses zu haben, und wenn das Fenster zum Hochladen von Bildern angezeigt wird, muss ich den aktiven Zugriff verwenden, um die syslistview aus dem Fenster zu holen und das 2. Element auszuwählen, das ein Bild ist. Das 1. Element ist ein Ordner . oder das erste Element in einer findfirstfile gibt nur Dateianrufe zurück. Ich benutze den Namen, um nach dem Element in einer Datenbank mit Elementen zu suchen und dann auf diese Elemente zuzugreifen und nach dem Hochladen von Bildern einige Attribute zu aktualisieren. Dann verschiebe ich die Datei aus diesem Ordner in einen anderen Ordner, damit sie nicht erneut verarbeitet wird Gehen Sie zur nächsten ersten Datei in der Liste und wiederholen Sie die Schleife, bis der Skriptname am Ende des Updates gefunden wird.

Wenn Sie einfach teilen, wie eine Person mit geringer Dateneingabe Zeit spart und all diese Überprüfungen der Formulierungen abhält.

Grüße.

Tolle Ideen. 

Ich entfernte re-captcha eine Weile zurück, wandelte meine contactform.html in contactform.asp um und fügte dies an der Oberseite hinzu (Offensichtlich mit etwas Code dazwischen, um einige Funktionen wie sendmail zu füllen, das ausgefüllte Formular vollständig ausfüllen usw.).

    <%
     if Request.Form("Text") = 8 then
        dothis
      else
        send them to google.com
     end if
   %>

Auf dem Formular habe ich ein grundlegendes Textfeld mit dem Namenstext aufgeklebt, so dass es aussieht, als würde alles nicht spezifiziert werden. Ich habe dann einen Text 2 Zeilen oben in rot geklebt, der angibt, was 2 + 6 = in das Feld darunter ist Senden Sie Ihre Anfrage.

0
FenceGuy

Dies ist eine sehr kurze Version, die nicht fehlgeschlagen ist, seit sie vor 4 Jahren auf meinen Websites implementiert wurde. Je nach Bedarf wurden Abweichungen hinzugefügt. Dies kann mit allen Variablen und if else-Anweisungen aufgebaut werden, die Sie benötigen

    function spamChk() {
    var ent1 = document.MyForm.Email.value
    var str1 = ent1.toLowerCase();
    if (str1.includes("noreply")) {
    document.MyForm.reset();
    }

<input type="text" name="Email" oninput="spamChk()">

Ich war heute tatsächlich hierher gekommen, um herauszufinden, wie bestimmte IP-Adressen von Spam-Bots zu H E L L .. umgeleitet werden

0
Kickenback61