Azubi Fred: Spambot umgeht Spamfilter?

Hallo!

Seit einigen Tagen treibt mich ein Spambot in den Wahnsinn! Er verwendet die Kontaktformulare mehrerer Kundenseiten, um seinen sinnlosen Inhalt zu verteilen.
Die Seiten selbst sind sehr verschachtelt aufgebaut, sprich es werden viele Inculdes benutzt. Bevor das Formular abgeschickt werden kann, werden die Daten per Javascript zum ersten Mal überprüft, ist diese erfolgreich, wird ein include aufgrufen, der die eingegebenen Daten auf php ebene überprüft. Ist diese Überprüfung erfolgreich, wird ein drittes Include verwendet, dass die Daten einmal an den Empfänger versendet (per email) und desweiteren, die Daten in eine Datenbank einträgt, sodaß der Kunde die Kontaktanfrage online über seine Seite einsehen kann.

Verwende ich die Formulare auf der Seite (per Hand quasi) wird der Spamfilter ausgelöst und es wird nicht verschickt.
Der Spambot umgeht dies aber, trägt dennoch die Daten in die Datenbank ein und verschickt den Spam per email.

Ein Captcha bekomme ich einfach nicht ans Laufen, das Bild wird aus einem mir unbekannten Grund nicht angezeigt, trotz eingeschalteter GDLib.

Hat jemand einen Rat für mich, was ich weitergehend tun kann, um dem Problem Herr zu werden? Ein IP-Ban kann ich leider nicht durchführen!

Vielen Dank schon mal im Vorraus.

Fred

  1. Yerf!

    Die Seiten selbst sind sehr verschachtelt aufgebaut, sprich es werden viele Inculdes benutzt.

    Für Spam-Bots ist das ziemlich irrelevant... viel wichtiger wäre der exakte Ablauf, der mir hier nicht ganz klar wird:

    Bevor das Formular abgeschickt werden kann, werden die Daten per Javascript zum ersten Mal überprüft,

    Ok, nützlich für den Besucher aber irrelevant gegen Spam

    ist diese erfolgreich, wird ein include aufgrufen, der die eingegebenen Daten auf php ebene überprüft.

    Wie wird hier ein Include gerufen? Javascript kann das ja nicht, also wird wohl erst mal das Formular abgeschickt, oder?

    Ist diese Überprüfung erfolgreich, wird ein drittes Include verwendet,

    Dito. Findet der Include noch innerhalb des gleichen Requests statt oder wandert das Formular zwischenzeitlich nochmals zum Browser des Benutzers?

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. ist diese erfolgreich, wird ein include aufgrufen, der die eingegebenen Daten auf php ebene überprüft.

      Wie wird hier ein Include gerufen? Javascript kann das ja nicht, also wird wohl erst mal das Formular abgeschickt, oder?

      Der genaue code lautet:

      <form name="ANFRAGE" method="post" onSubmit="return chkanfrage()" action="http://$VARIABLE_DER_DOMAIN/[...]/kontakt_insert.php?NAME=$VARIABLE_KUNDE">

      Oh, ich sehe ich habe mich falsch ausgedrückt. Also, das Script für das Formular wird per Include auf der Hauptseite eingefügt. In diesem Inculde steht der html code für das Formular, nebst Javascript chkanfrage(). So wie ich das verstehe (bitte habt Rücksicht, bin nur Azubi) wird "action" erst ausgeführt, wenn chkanfrage() erfolgreich durchlaufen wird, oder? Nunja... wird das Formular abgeschickt, wird die Seite kontakt_insert.php aufgerufen, auf der die eingegeben Daten per PHP überprüft werden. Hier ist bereits ein Spamfilter eingebaut, der bestimmte Emailadressen sperrt. Werden die Daten als korrekt eingestuft, wird auf kontakt_insert.php ein Include aufgerufen, der die Daten dann an die Mailadresse des Kunden und an die Datenbank weiterschickt.

      Ich glaube, schematisch lässt sich das so darstellen:

      HAUTPSEITE
      -> Include Formular [aus verzeichnis X]
         Javascript Prüfung
         Kein Erfolg: Focus auf falsches Feld, return false
         Bei Erfolg:
      -> action kontakt_insert.php aufrufen [aus Verzeichnis Y]
         PHP Überprüfung
         Kein Erfolg: Error-Message oder die(Error-Message)
         Bei Erfolg:
      -> kontakt_verschicken.inc aufrufen [aus Verzeichnis Z]
         Anfrage per Mail verschicken und in Datenbank eintragen

      Ich hoffe, ich konnte die Arbeitsweise jetzt verdeutlich. Ich denke, man muss bei kontakt_insert.php und/oder bei kontakt_verschicken.inc ansetzen.

      Der Bot trägt sich IMMER mit einer yahoo Absenderadresse ein. Deswegen habe ich erst mal eine Sperrung dieser Adresse eingerichtet. Das PHP Script überprüft das Feld $EMAIL auf den str "yahoo". Wird dieser erkannt erfolgt ein die() Befehl.

      Gruß

      Fred

      1. Yerf!

        Also, das Script für das Formular wird per Include auf der Hauptseite eingefügt. In diesem Inculde steht der html code für das Formular, nebst Javascript chkanfrage(). So wie ich das verstehe (bitte habt Rücksicht, bin nur Azubi) wird "action" erst ausgeführt, wenn chkanfrage() erfolgreich durchlaufen wird, oder?

        Wenn JavaScript ausgeführt wird, dann ja. Ohne JS wird aber sofort abgeschickt und SpamBots schicken sowieso meist einen direkten Request auf die Zieladresse ab. Da kann man aber auch nichts weiter dagegen machen. Deshalb kommt ja am Server ebenfalls nochmal eine Überprüfung.

        Nunja... wird das Formular abgeschickt, wird die Seite kontakt_insert.php aufgerufen, auf der die eingegeben Daten per PHP überprüft werden. Hier ist bereits ein Spamfilter eingebaut, der bestimmte Emailadressen sperrt. Werden die Daten als korrekt eingestuft, wird auf kontakt_insert.php ein Include aufgerufen, der die Daten dann an die Mailadresse des Kunden und an die Datenbank weiterschickt.

        Sieht soweit ganz gut aus. Aufgrund der ersten etwas ungenauen Beschreibung hatte ich nur befürchtet, dass nach der Server-Prüfung nochamls eine Art Vorschau kommt die nochmals abschickt wird und dann ohne weitere Prüfung verarbeitet wird. Das wäre gefährlich gewesen.

        Ich hoffe, ich konnte die Arbeitsweise jetzt verdeutlich. Ich denke, man muss bei kontakt_insert.php und/oder bei kontakt_verschicken.inc ansetzen.

        Ja, sieht auch ganz vernünftig aus. Was mich etwas wundert ist das bei einem händischen Test die Spam-Prüfung zuschlägt, bei den Einträgen des Bots aber nicht. Oder war es in diesem Fall die JS-Prüfung?

        Der Bot trägt sich IMMER mit einer yahoo Absenderadresse ein. Deswegen habe ich erst mal eine Sperrung dieser Adresse eingerichtet. Das PHP Script überprüft das Feld $EMAIL auf den str "yahoo". Wird dieser erkannt erfolgt ein die() Befehl.

        Hier im Forum wurden schon öfters verschiedene Vorschläge zur Spam-Minimierung diskutiert (wie z.B. durch CSS versteckte Felder). Das Archiv sollte einiges hergeben.

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Huhu ^^

          Ja, sieht auch ganz vernünftig aus. Was mich etwas wundert ist das bei einem händischen Test die Spam-Prüfung zuschlägt, bei den Einträgen des Bots aber nicht. Oder war es in diesem Fall die JS-Prüfung?

          Genau das wundert mich auch. In diesem Falle ist es eine PHP Überprüfung, die händisch zuschlägt, beim Bot aber nicht.

          Ich habe mich mal umgesehen und bin dabei auf www.Bot-Trap.de gestoßen. Ich werde das mal ausprobieren.

          In den meisten Beiträgen werden Captchas empfohlen... leider habe ich die bisher nicht zum laufen gebracht :-( Besonders begeistert bin ich davon ehrlich gesagt auch nicht, denn es wirkt in dem Bereich, für den die Homepages meiner Firma konzipiert sind, nicht ganz seriös, wenn dort ein Captcha steht. Zumal ich die Befürchtung habe, das auch dieses umgangen werden kann.

          Damn Spambots... die Leute gehören doch eingesperrt :-(

          Gruß

          Fred

          1. Damn Spambots... die Leute gehören doch eingesperrt :-(

            klingt irgendwie nach "bots sind auch nur menschen" wenn du von "spambots" und "die leute" redest :D

            SCNR

            1. Damn Spambots... die Leute gehören doch eingesperrt :-(
              klingt irgendwie nach "bots sind auch nur menschen" wenn du von "spambots" und "die leute" redest :D

              Hab mal gelesen, dass es in China Leute gebensoll, die gegen Geld den ganzen Tag nichts anderes machen als CAPTCHAs zu lösen. Die GMail-CAPTCHAs sollen wohl so geknackt worden sein. Insofern - ja einige Bots sind auch nur Menschen ;-)

              thebach

              --
              selfcode: ie:% fl:( br:> va:) ls:& rl:( n4:~ ss:| de:> js:( ch:? mo:} zu:)
              "Egal, ob ein Sandkorn oder ein Stein. Im Wasser sinken sie beide."
              1. Mahlzeit,

                Hab mal gelesen, dass es in China Leute gebensoll, die gegen Geld den ganzen Tag nichts anderes machen als CAPTCHAs zu lösen.

                Naja, solange sie mir nicht in Azeroth und der Scherbenwelt sämtliche Kräuter wegfarmen, soll mir das doch egal sein ... ;-)

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
              2. Hello,

                Hab mal gelesen, dass es in China Leute gebensoll, die gegen Geld den ganzen Tag nichts anderes machen als CAPTCHAs zu lösen.

                Nee, das geht noch subtiler.
                Das Captcha mit einigen wensetlichen Daten wird vom Bot aufgegriffen und auf einer Bot-eigenen Seite, die hoch frequentiert ist, realen Menschen gezeigt. Diese geben das dann ein und bekommen dafür einen Gummipunkt. Der Bot nimmt es wieder (ca. 70 - 80% der Captchas haben die unwissenden Helfer schon geknackt), und reicht es zurück an seinen Dialogpartner. Wenn der ein neues Captcha schickt, macht der Bot das Spiel eben nochmal. Die Fehlerquote sinkt damit schon von 30% auf 9%. Zur Not macht er das Spiel auch noch ein drittes Mal (Q- = 2,7%).

                Und so saugt und bläst der Heinzelmann, wo Mutti sonst nur blasen kann ...

                Ein harzliches Glückauf

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
      2. Ich bregreif's einfach nicht... langsam zweifle ich wirklich an meiner Intelligenz :-(

        Wie weiter oben beschrieben gibt es 3 Ebenen - Das UI (Formular), Die Datenüberprüfung und schließlich der Versandt.

        Der Bot umgeht einfach Ebene 2. Egal was ich mache, egal was ich einbaue, nichts wirkt. Ich habe die Datei von bot-trap.de eingebaut, getestet und es läuft ordnungsgemäß, der Bot scheint also (noch) nicht auf der Liste zu sein. Einen Honeypot habe ich auch installier, getestet und es läuft, registreirt aber den Bot nicht :-(. Ich habe desweiteren ein CSS Hiddenfeld eingebaut, wie ich es hier mehrfach im Forum gelesen habe - ebenfalls kein Erfolg. Dann habe ich eine einfache is_numeric (für PLZ) und strstr (für EMAIL) Prüfung der Felder mit entsprechendem die() Befehl bei false Ausgabe - kein Erfolg. Zum Schluß habe ich einfach einen Vergleich zweier Felder vorgenommen - der Bot trägt sich mit yahoo Absenderadressen ein - ist das Feld EMAIL mit einer yahoo Adresse versehen, wird die Empfänger-Emailadresse auf die Absendeemailadresse gesetzt - ihr könnt's erraten, immer noch nichts.

        WICHTIG: Händisch schlägt alles an!

        Ich weiß einfach nicht weiter... das Problem ist, dass ich die Sachen alle in Ebene 2 einbauen MUSS, da dies ein zentrales System ist, auf das viele Klienten zugreifen... die angeforderten Daten werden mittels PHP Scripte als html Dateien generiert und per FTP auf die Domains der Kunden geladen, sodaß die fertige Seite so entsteht und der Kunde dann alles bequem per CMS verwalten kann.

        Captchas kann ich nicht gebrauchen, da diese Eingabefelder in dem Bereich einfach nichts zu suchen haben. Ich muss den Schutz also im Hintergrund einbauen - nur wie?

        Gruß

        Fred

        1. Blöde Frage:
          Du 'weisst' das es ein Spambot ist,
          weil du die Logdatei siehst.
          --Wenn du in der Lage bist, auf der Basis der Logdatei Analyse diese Entscheidung zu treffen,
          --dann kannst du auch ein Logfile erstellen und aktualisieren lasse, und dein Script diese Analyse nachvollziehen lassen.

          Liege ich falsch?

          mfg Beat

        2. Hi,

          Wie weiter oben beschrieben gibt es 3 Ebenen - Das UI (Formular), Die Datenüberprüfung und schließlich der Versandt.

          Verstehe bitte, dass die "erste Enene" völlig irrelevant ist, da Bots kein Javascript nutzen.
          Außerdem gibt es einige - schlecht programmierte - Bots, die einmal gefundene Formulardaten stets erneut verwenden. Alles, was Du in Deiner "HAUTPSEITE -> Include Formular [aus verzeichnis X]" änderst, kann also völlig bedeutungslos sein.
          Offenbar handelt es sich auch um einen fehlgeleiteten Bot, der Dein Kontaktformular mit einem Gästebuch verwendet, denn normalerweise hält sich Spam in Kontaktformulare in Grenzen.

          Der Bot umgeht einfach Ebene 2. Egal was ich mache, egal was ich einbaue, nichts wirkt.

          Du meinst die PHP-Überprüfung in action kontakt_insert.php? Sofern Du hier auf neue Felder im Kontaktformular prüfst, kann das wie gesagt sinnlos sein.

          Ich habe die Datei von bot-trap.de eingebaut, getestet und es läuft ordnungsgemäß, der Bot scheint also (noch) nicht auf der Liste zu sein.

          Das ist mMn sowieso der falsche Weg. Bei den über 6000 Spams, die mein Gästebuchscript monatlich blockt, finde ich immer wieder neue IPs. "Gute" Spammer versenden ihren Müll oft zwei- oder dreimal hintereinander unter unterschiedlichen IPs.

          Dann habe ich eine einfache is_numeric (für PLZ) und strstr (für EMAIL) Prüfung der Felder mit entsprechendem die() Befehl bei false Ausgabe - kein Erfolg.

          Bots sind oft intelligent genug, um die erwarteten Angaben einzutragen.

          Zum Schluß habe ich einfach einen Vergleich zweier Felder vorgenommen - der Bot trägt sich mit yahoo Absenderadressen ein - ist das Feld EMAIL mit einer yahoo Adresse versehen, wird die Empfänger-Emailadresse auf die Absendeemailadresse gesetzt

          Diese Reaktion ist natürlich unsinnig, allerdings verstehe ich beim besten Willen nicht, was Du mit:

          WICHTIG: Händisch schlägt alles an!

          meinst.
          Tipp zum Testen: Lade mal die ursprüngliche Version der "HAUTPSEITE" hoch und rufe diese bei zuvor deaktiviertem Javascipt in Deinem Browser auf.

          Übrigens zum Thema "Ebenen": Normalerweise sollte ein Kontaktformular nur aus einer einzigen Seite bestehen - Stichwort "Affenformular".
          Wer die URL Deiner action kontakt_insert.php kennt, kann die Daten direkt dorthin schicken. Und was an kontakt_verschicken.inc eine "dritte Ebene" sein soll, verstehe ich auch nicht.

          Irgendwas machst Du grundlegend falsch. Was das ist, kann ich Dir ohne zumindest die Angabe der Seite nicht sagen.

          freundliche Grüße
          Ingo

  2. Ein Captcha bekomme ich einfach nicht ans Laufen, das Bild wird aus einem mir unbekannten Grund nicht angezeigt

    Die Dinger sind eh vergebene Liebesmüh, da entweder automatisiert auslesbar oder auch für Menschen nicht mehr erkennbar.
    Wichtige Regel bei der Spam-Abwehr in Webformularen: Nicht das machen, was alle machen. Je öfter ein Mechanismus eingesetzt wird (wie eben Bild-Captchas), desto geringer sind die Entwicklungskosten pro angegriffenem Formular für einen Umgehungsmechanismus und desto eher werden sie überwunden.

    Füge stattdessen ein separates Eingabefeld mit einer einfachen Frage ein. Öfters zu sehen sind Grundschulrechenaufgaben ("Fünf plus drei sind wie viel?"), sehr praktikabel fand ich den vor einer Weile hier im Forum gemachten Vorschlag, den Benutzer aufzufordern, das n-te Zeichen seiner eMail-Adresse nochmals einzutippen ("Bitte geben Sie das 3. Zeichen Ihrer eMail-Adresse ein:" -> bei test@example.com müsste der Besucher dann s eintippen). Variere die Aufgaben.

    Falls du die Möglichkeit hast, kannst du auch das Kontaktformular an eine andere URL verschieben und Suchmaschinen verbieten, es zu indizieren, denn außer Spambots sucht eh niemand nach Kontaktformularen. Das wäre in deinem Fall ein guter Test, um herauszufinden, ob sich die Spamflut mit dem Aussperren von Suchmaschinen verringern lässt.