Andy: Spam in Gästebuch verhindern!

Hallo Zusammen

Ich habe zurzeit ein nerviges Spam Problem! Ich verwende ein Gästebuch welches immer nach ca. 24 Stunden total Voll ist mit Spam. Das Script funktioniert so, dass das Skrip die Gästebuch- Einträge in ein .txt File (chmod 777) speichert, und dieses wieder ausliest. ( fwrite & fread )

Leider wird das Gästebuch laufend total zugespamt! Das nervt mich tödlich! Gibt es eine möglichkeit das Gästebuch so zu schützen das Spam Generatoren kein Spam mehr plazieren können?

ICh weiss die Lösung mit txt als Datenbank- Ersatz ist nicht sauber, aber leider kenne ich mich noch nicht genug mit MYSQL aus, um das Problem zu zu lösen!

Danke & Gruss

  1. Hallo
    Du könntest dynamisch ein Bild generieren auf das dann ein code geschrieben wird den man einlesen muss.

    Finden tust du sowas z.B. hier als tutorial:
    http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html

    Sebi

    1. Hallihallo!

      Du könntest dynamisch ein Bild generieren auf das dann ein code geschrieben wird den man einlesen muss.

      Oder Du könntest, was zumindest im Moment die brauchbarste Alternative zu sein scheint, die Besucher mit einer Zwangsvorschau "nerven", statt die Einträge direkt zu speichern.
      Oder einen Filter schreiben, der nach bestimmten Wörtern bzw. URLs sucht, und dann entscheidet, was mit dem Eintrag zu tun ist.

      Das Archiv hier ist voll mit mehr oder weniger brauchbaren Ideen, vielleicht ist etwas für Dich dabei. Suche einfach nach "Spam Gästebuch verhindern".

      Viele liebe Grüße,
      Der Dicki

      1. Noch einfacher ist es, wenn du deinen Besuchern statt einer generierten Garfik eine kleine Rechenaufgabe stellst. Die Zahlen lässt durch per Zufall generieren, speicherst das Ergebnis ebenfalls kurz zwischen und überprüfst bei Eingang eines Postings, ob das eingetragene Ergebnis in den vergangenen 15 Minuten Lösung einer gestellten Rechenaufgabe war.

        Gruß von Reiner

      2. hallo,

        Oder Du könntest, was zumindest im Moment die brauchbarste Alternative zu sein scheint, die Besucher mit einer Zwangsvorschau "nerven", statt die Einträge direkt zu speichern.

        Das reicht mittlerweile nicht mehr. Es gibt gerade in den letzten Tagen Spam-bots, die damit umgehen können. Die machen nur wieder den Fehler, daß sie aus lauter Begeisterung gleich fünfzig nahezu gleichlautende Einträge produzieren. Sowas sieht man dann sofort, während ein einzelner Eintrag auch schonmal ein paar Tage lang übersehen werden könnte.

        Oder einen Filter schreiben, der nach bestimmten Wörtern bzw. URLs sucht, und dann entscheidet, was mit dem Eintrag zu tun ist.

        Das ist sicher sinnvoll. Mal ein Beispiel, womit man anfangen könnte:
        if ($_SERVER['QUERY_STRING'] == "prev" && $name && !preg_match("/[^a-zA-ZäöüÄÖÜß&; ]/",$name) && $text && !preg_match("/^[^a-zA-ZäöüÄÖÜ]/",$text) && !preg_match("/^[^http:\/\/]/",$url) && !preg_match("/url/",$text)) {
        Damit komme ich, wie mir das log zeigt, relativ weit, obwohl die Formularfelder genau diejenigen Namen tragen ("name", "mail", "url"), die von den bots gezielt gesucht werden, und die man daher besser vermeiden sollte. Der Reihe nach passiert folgendes:

        • es muß ein Name angegeben sein
        • der Name darf nur Buchstaben enthalten
        • es muß Text vorhanden sein
        • wenn eine URL eingetragen wird, muß sie mit "http://" beginnen
        • es darf keine Angaben [url] im Text geben (das kennen die bots als BBCode und tragen das oft ein)
          Das reicht vermutlich nicht wirklich aus. Ich schalte solche bzw. ähnliche Abfragen vor, ehe es ans Eintragen geht (übrigens auch in eine Textdatei, die sich hervorragend eignet, wie Ingo bereits angegeben hat). Und normalerweise gibt es nach einer Eintragung eine kurze Bestätigung ("Ihr Beitrag wurde gespeichert" oder so). Die bekommt jemand, der durch den Filter zurückgehalten wird, auch zu sehen, aber bei dem ist es eine glatte Lüge.

        Das Archiv hier ist voll mit mehr oder weniger brauchbaren Ideen

        Ich habe selber mal einen vergleichbaren Thread im Frühjahr angestoßen und kann mich erinnern, daß Vinzenz da ein paar kluge Anmerkungen geschrieben hatte. Allerdings bin ich jetzt zu faul, den herauszusuchen.

        Man könnte die Thematik vielleicht noch etwas vertiefen. Beispielsweise ist mir immer noch nicht restlos klar, wie ein bot überhaupt herausfindet, worauf er reagieren könnte. Ich lasse sämtliche Anzeigen (Eingabeformular, Fehlermeldungen, Vorschau, Bestätigungsmeldung) generieren, es sind keine statischen HTML-Dokumente. Also muß ein bot irgendwie in das PHP-Script hineinschauen können, um zu entscheiden, ob er es aufruft und "bedient". Und dann (selbst wenn das blöde klingt): als normaler Besucher eine Gästebuchseite bin ich es gewohnt, daß ich zum Abschicken einen button betätigen oder die Enter-Taste drücken muß. Eine schlüssige Erklärung, wie ein bot das bedient, fehlt mir auch noch, ich habe da bisher nur Vermutungen. Einen unmittelbaren Aufruf der Textdatei, in der die Eintragungen gespeichert sind, konnte ich bisher nicht feststellen. Besuche von solchen bots gibt es aber täglich mehrmals, das zeigt das log deutlich.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo Christoph.

          Oder Du könntest, was zumindest im Moment die brauchbarste Alternative zu sein scheint, die Besucher mit einer Zwangsvorschau "nerven", statt die Einträge direkt zu speichern.

          Das reicht mittlerweile nicht mehr. Es gibt gerade in den letzten Tagen Spam-bots, die damit umgehen können. Die machen nur wieder den Fehler, daß sie aus lauter Begeisterung gleich fünfzig nahezu gleichlautende Einträge produzieren.

          Interessant, auch ich wurde davon nicht verschont. Bei mir waren es 16 Einträge und ich war im Verlaufe des Wochenendes auch nicht an einem Computer zugange. Aber da Beiträge bei mir sowieso zwangsläufig von mir freigeschaltet werden müssen, stellt dies kein Problem dar.

          Beispielsweise ist mir immer noch nicht restlos klar, wie ein bot überhaupt herausfindet, worauf er reagieren könnte.

          Er sucht nach „<form“, er sucht nach „action=“ und schon hat er die ersten Indizien sowie erforderlichen Informationen zugleich.

          Und dann (selbst wenn das blöde klingt): als normaler Besucher eine Gästebuchseite bin ich es gewohnt, daß ich zum Abschicken einen button betätigen oder die Enter-Taste drücken muß. Eine schlüssige Erklärung, wie ein bot das bedient, fehlt mir auch noch, ich habe da bisher nur Vermutungen.

          Wie wäre es damit, einfach eine POST-Request an die im action-Attribut genannte Ressource zu senden? Jede gute Programmiersprache bietet hierfür Möglichkeiten zur Umsetzung.

          Einen schönen Sonntag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
          1. hallo,

            als normaler Besucher eine Gästebuchseite bin ich es gewohnt, daß ich zum Abschicken einen button betätigen oder die Enter-Taste drücken muß. Eine schlüssige Erklärung, wie ein bot das bedient, fehlt mir auch noch, ich habe da bisher nur Vermutungen.
            Wie wäre es damit, einfach eine POST-Request an die im action-Attribut genannte Ressource zu senden? Jede gute Programmiersprache bietet hierfür Möglichkeiten zur Umsetzung.

            Naja, das ist das, was ich vermute. Vielleicht stelle ich mich bei Tests aber auch nicht geschikct genug an - ich habe nämlich durchaus schon versucht, zum Test mal sowas laufen zu lassen. Wenns auf meinen eigenen Webspace geht, kann ich ja eh nur mir selber eventuellen Schaden zufügen. Aber ich habs nicht hingekriegt. Im Gegensatz zu den Bösewichtern.

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Hallo Christoph.

              Wie wäre es damit, einfach eine POST-Request an die im action-Attribut genannte Ressource zu senden? Jede gute Programmiersprache bietet hierfür Möglichkeiten zur Umsetzung.

              Naja, das ist das, was ich vermute. Vielleicht stelle ich mich bei Tests aber auch nicht geschikct genug an - ich habe nämlich durchaus schon versucht, zum Test mal sowas laufen zu lassen. Wenns auf meinen eigenen Webspace geht, kann ich ja eh nur mir selber eventuellen Schaden zufügen. Aber ich habs nicht hingekriegt. Im Gegensatz zu den Bösewichtern.

              Hier einmal fix zusammengehackt: Post me (Source) & Post ’em (Source).

              Einen schönen Sonntag noch.

              Gruß, Mathias

              --
              ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
              debian/rules
              1. hallo,

                Hier einmal fix zusammengehackt: Post me (Source) & Post ’em (Source).

                Hm. Das bedeutet beispielsweise, daß man in "postem.php" für $str_host nur ein Array setzen müßte, in das die gerade abgesuchten Domainnamen gestopft werden. Ich schau mir das mal an - übrigens ausdrücklich _ohne_ die Absicht, nun einen eigenen bot basteln zu wollen ;-) Aber daß es ganz so einfach sein soll, mag ich noch nicht glauben.

                Grüße aus Berlin

                Christoph S.

                --
                Visitenkarte
                ss:| zu:) ls:& fo:) va:) sh:| rl:|
          2. hallo,

            Beispielsweise ist mir immer noch nicht restlos klar, wie ein bot überhaupt herausfindet, worauf er reagieren könnte.
            Er sucht nach „<form“, er sucht nach „action=“

            Die kriegt er bei mir erst geliefert, wenn er herausgefunden hat, daß er die Gästebuch-Url mit dem Parameter "add" aufrufen muß. Auch das ist für einen menschlichen Besucher ein Klacks bzw. ein Mausklick. Gut, als POST-Request ist das sehr leicht zu erraten, ich werde das mal in etwas Schwierigeres umbenennen, mal sehen, was dann passiert.

            Ich hatte übrigens in den letzten Tagen keine Spam-Einträge, aber in meinem log hat es gewaltig rumort. Ich verstehe also gut, daß jemand das Problem mal anspricht.

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
        2. Hi,

          Es gibt gerade in den letzten Tagen Spam-bots, die damit umgehen können.

          Echt? Und Du bist sicher, dass sie nicht die Vorschauseite direkt ansteuern?

          Beispielsweise ist mir immer noch nicht restlos klar, wie ein bot überhaupt herausfindet, worauf er reagieren könnte. Ich lasse sämtliche Anzeigen (Eingabeformular, Fehlermeldungen, Vorschau, Bestätigungsmeldung) generieren, es sind keine statischen HTML-Dokumente. Also muß ein bot irgendwie in das PHP-Script hineinschauen können, um zu entscheiden, ob er es aufruft und "bedient".

          wieso? Wenn er erstmal die URL der Vorschauseite kennt, kann er doch diese zuspammen, sofern Du keine Vorkehrungen dagegen getroffen hast. Ich halte es für unwahrscheinlich, dass ein Bot sich wirklich die Mühe macht und die Antwort (=Vorschau) entgegen zu nehmen und auszuwerten.

          Und dann (selbst wenn das blöde klingt): als normaler Besucher eine Gästebuchseite bin ich es gewohnt, daß ich zum Abschicken einen button betätigen oder die Enter-Taste drücken muß. Eine schlüssige Erklärung, wie ein bot das bedient, fehlt mir auch noch

          Diese Funktion wird im Formular über den type "submit" aktiviert und im action-Attribut des FORM-Tags steht das Ziel. Alles ohne Probleme  maschinenlesbar.
          Was sollte hier daran

          "Leider" hat noch kein Bot mein erstes völlig ungeschütztes Kommentar-Script (die Daten übrigens auch "ungeschützt" als text/xml entdeckt (aber vielleicht ändert sich das ja mit dem Link hier?), so dass ich noch keine Gelegenbheit hatte, Abwehrmaßnahmen zu testen.. ;-)

          freundliche Grüße
          Ingo

          1. hallo Ingo,

            Du bist sicher, dass sie nicht die Vorschauseite direkt ansteuern?

            Nö, bin ich nicht. Es gibt offensichtlich - wenn ich mein log anschaue - unterschiedliche bots, die zur Zeit besonders aktiv sind. Einige können das direkt, andere nehmen den Umweg über das Eingabeformular.

            Wenn er erstmal die URL der Vorschauseite kennt, kann er doch diese zuspammen, sofern Du keine Vorkehrungen dagegen getroffen hast.

            Habe ich ;-)

            "Leider" hat noch kein Bot mein erstes völlig ungeschütztes Kommentar-Script (die Daten übrigens auch "ungeschützt" als text/xml entdeckt

            Nunja, klingt twar böse, aber im Interesse der Diskussion hier wünsche ich dir möglichst baldigen Besuch eine solchen Unruhestifters ;-)

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
          2. Lieber Ingo,

            Echt? Und Du bist sicher, dass sie nicht die Vorschauseite direkt ansteuern?

            das würde in meinem Falle keine Wirkung haben, da die Vorschauseite in meinem Script immer ein zufällig benanntes verstecktes Element hat. Der Name und der dazugehörige Wert werden in einer Session mitgespeichert. Daher nützt die URL der Vorschauseite einem Bot bei mir herzlich wenig.

            Vergleiche selbst:
            erste Vorschau <input type="hidden" name="F1005" value="C3329" />
            zweite Vorschau: <input type="hidden" name="X9945" value="L4029" />

            Sollte mein Formular aus irgendeiner Vorschau abgeschickt werden und der Session-Mechanismus nicht das passend benannte und zusätzlich passend befüllte Feld mit übermitteln, landet der Besucher/Bot unverrichteter Dinge wieder bei einer erneuten Vorschau, in welcher das versteckte Feld schon wieder neu benannt und befüllt wurde (Werte stehen auch wieder neu in der Session)!

            Somit ist es bisher keinem Bot gelungen, sich in mein GB einzutragen. Einer für Amateur-Pornografie werbenden Person war es gestern natürlich trotzdem möglich, Werbung in meinem GB abzusetzen, aber das entspricht ja auch der Absicht: Menschen sollen in der Lage sein, unbehelligt (das meint: "ohne Captchas") im Browser in mein GB einzutragen, auch wenn das, was sie mir da bringen, nicht immer das ist, was ich dort gerne sehe...

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

    2. Hallo Sebi,

      Finden tust du sowas z.B. hier als tutorial:
      http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html

      Das geht auch einfacher. Ich habe mal ein Bild im Einsatz gehabt, auf das ein Zufallsstring geschrieben wurde, der auch gleichzeitig in eine Textdatei geschrieben wurde. Beim Abschicken wurde dann überprüft, ob der eingegebene Code mit dem Inhalt der Textdatei übereinstimmt.

      Das hat wunderbar funktioniert. Übrigens habe ich auch noch nie ein vollgespammtes Vorschau-Gästebuch gesehen, das scheint also auch eine unüberwindbare Hürde darzustellen.

      Beste Grüße
      Richard

  2. Hi,

    ICh weiss die Lösung mit txt als Datenbank- Ersatz ist nicht sauber

    wieso? Wenn keine komplexen Abfragen benötigt werden und nicht mehrere Datensätze parallel bearbeitet werden müssen, ist das äußerst effektiv und resourcensparend. Rate mal, wie die Postings hier gespeichert werden...

    freundliche Grüße
    Ingo

  3. Lieber Andy,

    Ich habe zurzeit ein nerviges Spam Problem! Ich verwende ein Gästebuch welches immer nach ca. 24 Stunden total Voll ist mit Spam.

    dieses Problem kenne ich nicht. Bei mir können bisher nur echte Menschen eintragen.

    Das Script funktioniert so, dass das Skrip die Gästebuch- Einträge in ein .txt File (chmod 777) speichert, und dieses wieder ausliest. ( fwrite & fread )

    Das mache ich fast genauso, nur dass meine Text-Datei eine XML-Datei ist...

    Gibt es eine möglichkeit das Gästebuch so zu schützen das Spam Generatoren kein Spam mehr plazieren können?

    Also ich verwende eine erste Zwangsvorschau und kombiniere diese mit einem Session-Mechanismus. Mein GB ist in PHP geschrieben, da kann man den in PHP implementierten Session-Mechanismus prima einbauen.

    ICh weiss die Lösung mit txt als Datenbank- Ersatz ist nicht sauber

    Ich möchte Dir da widersprechen.

    aber leider kenne ich mich noch nicht genug mit MYSQL aus, um das Problem zu zu lösen!

    Der Umstieg auf MySQL löst Dein Problem nicht. Soviel lässt sich jetzt schon sagen.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Hallo Felix.

      Das Script funktioniert so, dass das Skrip die Gästebuch- Einträge in ein .txt File (chmod 777) speichert, und dieses wieder ausliest. ( fwrite & fread )

      Das mache ich fast genauso, nur dass meine Text-Datei eine XML-Datei ist...

      … und vermutlich auch nicht unnötigerweise ausführbar.

      Einen schönen Sonntag noch.

      Gruß, Mathias

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules
      1. Lieber Mathias,

        Das mache ich fast genauso, nur dass meine Text-Datei eine XML-Datei ist...

        … und vermutlich auch nicht unnötigerweise ausführbar.

        doch, das ist sie... Hmm. Dass das nicht sinnvoll ist, ist mir klar. Jedoch ist die XML-Datei hinter einem HTTP_AUTH-Mechanismus verborgen (.htaccess-geschütztes Verzeichnis) und kann so zunächst nicht ausgeführt werden.

        Wie man sie dennoch "ausführen" lassen kann, würde mich nun aber doch interessieren. Vielleicht weißt Du darüber mehr?

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Hallo Felix.

          Das mache ich fast genauso, nur dass meine Text-Datei eine XML-Datei ist...

          … und vermutlich auch nicht unnötigerweise ausführbar.

          doch, das ist sie... Hmm. Dass das nicht sinnvoll ist, ist mir klar. Jedoch ist die XML-Datei hinter einem HTTP_AUTH-Mechanismus verborgen (.htaccess-geschütztes Verzeichnis) und kann so zunächst nicht ausgeführt werden.

          Sie wird niemals ausgeführt werden können. Was soll der Sinn und Zweck einer Ausführung eines XML-Dokumentes sein?

          Wie man sie dennoch "ausführen" lassen kann, würde mich nun aber doch interessieren. Vielleicht weißt Du darüber mehr?

          Normale Dateien sollten niemals ausführbar sein.

          Einen schönen Sonntag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
          1. Liebe Mathias,

            Das mache ich fast genauso, nur dass meine Text-Datei eine XML-Datei ist...

            … und vermutlich auch nicht unnötigerweise ausführbar.

            doch, das ist sie...

            Sie wird niemals ausgeführt werden können. Was soll der Sinn und Zweck einer Ausführung eines XML-Dokumentes sein?

            Aha. Dann kann also "nix passieren"? Das klingt beruhigend.

            Normale Dateien sollten niemals ausführbar sein.

            Auf einem Webserver in einem Unterordner von Document Root dürfte also eine nicht-ausführbare Datei, die aber das Ausführbar-Bit gesetzt hat, nur ein rein akademisches Problem sein, oder habe ich das jetzt falsch verstanden?

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            1. hallo Felix,

              Sie wird niemals ausgeführt werden können. Was soll der Sinn und Zweck einer Ausführung eines XML-Dokumentes sein?
              Aha. Dann kann also "nix passieren"? Das klingt beruhigend.

              Doch, da kann allerhand passieren. Es könnte jemand auf die Idee kommen, ausführbaren Code in dein Gästebuch einzutragen. Wenn die Datei ausführbar ist und irgendwo ein "rm -R /root" drinsteht, kriegst du ein mächtiges Problem.

              Auf einem Webserver in einem Unterordner von Document Root dürfte also eine nicht-ausführbare Datei, die aber das Ausführbar-Bit gesetzt hat, nur ein rein akademisches Problem sein, oder habe ich das jetzt falsch verstanden?

              Ja, da hast du allerhand sogar ganz heftig mißverstanden. Schreib- und Leserechte sind ganz okay (wobei ich da auch zwischen *.txt und *.xml Unterschiede machen würde), aber Ausführungrechte können enormen Schaden bewirken.

              Grüße aus Berlin

              Christoph S.

              --
              Visitenkarte
              ss:| zu:) ls:& fo:) va:) sh:| rl:|