Lars: / (JavaScript) Möglicher Spamschutz

Nabend,

ich war in letzter Zeit mehrmals am überlegen, wie ein Spamschutz wohl aussehen könnte, der den Benutzer nicht belästigt. Meine bisherige Methode hat versagt:

Bisher hatte ich im Formular ein zusätzliches Textfeld, welches ich mit CSS weit außerhalb des sichtbaren Bereichs positioniert hatte. Wenn das ausgefüllt wurde, wurde das Formular nicht abgeschickt. Der Gedanke war, dass Spambots vermutlich automatisch alle Felder ausfüllen, damit wären sie ausgeknockt...

Jetzt dachte ich mir, man könnte folgendes machen:

Da die Spambots anscheinend zum Großteil kein JavaScript interpretieren, wollte ich bei ausgeschaltetem JavaScript die gängige Bild-Kombination einsetzen. Also Zahlen/Buchstaben als Grafik, die der Benutzer dann ins Textfeld eintragen muss. Dies scheint ja für Spambots ein Problem darzustellen. Damit der Benutzer aber diese unfreundliche, ja sogar extrem nervige Methode nicht nutzen muss, würde ich bei eingeschaltetem JavaScript die entsprechenden Felder ausblenden und in die passende Kombination per JavaScript automatisch in das Textfeld eintragen lassen. Der Benutzer muss dann nicht mehr manuell die Kombination eintragen bzw. er sieht gar nicht, dass dort eigentlich eine Überprüfung stattfindet. Und da alle gängigen Browser JavaScript unterstützen, wäre ein Großteil der User von diesem Umstand befreit.

Spambots können kein JS, bekommen die Bildkombination präsentiert, die sie ebenfalls nicht lösen können, und sind damit ausgesperrt.

Wäre sowas machbar, oder habe ich einen Haken an der Sache übersehen?

Beste Grüße
Lars

  1. Hi,

    Da die Spambots anscheinend zum Großteil kein JavaScript interpretieren, wollte ich bei ausgeschaltetem JavaScript die gängige Bild-Kombination einsetzen. Also Zahlen/Buchstaben als Grafik, die der Benutzer dann ins Textfeld eintragen muss. Dies scheint ja für Spambots ein Problem darzustellen. Damit der Benutzer aber diese unfreundliche, ja sogar extrem nervige Methode nicht nutzen muss, würde ich bei eingeschaltetem JavaScript die entsprechenden Felder ausblenden und in die passende Kombination per JavaScript automatisch in das Textfeld eintragen lassen.

    Also muss das JavaScript die Kombination kennen, also muss sie irgendwo im Quelltext zum Client uebertragen werden.
    Nachdem der Spammer das Formulardokument ein mal analysiert hat, weiss er, wo dieser Wert zu suchen ist, kann also diese Aufgabe fuer kuenftige Formularabrufe automatisieren.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Also muss das JavaScript die Kombination kennen, also muss sie irgendwo im Quelltext zum Client uebertragen werden.
      Nachdem der Spammer das Formulardokument ein mal analysiert hat, weiss er, wo dieser Wert zu suchen ist, kann also diese Aufgabe fuer kuenftige Formularabrufe automatisieren.

      Man könnte es durch irgendeine Art Verschlüsselung laufen lassen... die ist natürlich auch JavaScript-basiert, und daher grundlegend unsicher...

      Aber die Frage ist: Ist es das Wert? Wird der Spammer so einen Aufwand betreiben, um ein deutschsprachiges Portal mit einigen Tausend Mitgliedern vollspammen zu können?

      Oder vielleicht gibts eine andere Möglichkeit... mit JavaScript/Ajax eine entfernte PHP-Seite aufrufen und dieser irgendein Ticket übermitteln... dann wird irgendwo (datenbank, textdatei) die IP-Adresse eingetragen; das Formular-Script schaut beim Absenden nach, ob die IP dort auftaucht: Wenn ja, wird die Bilderkennung übersprungen...

      Klingt auch nicht viel sicherer, oder? Aber ich hasse diese Bilderkennungs-Teile und hätte zu gern eine Lösung, die den Benutzer nicht behelligt...

      Grüße
      Lars

      1. hallo,

        Man könnte es durch irgendeine Art Verschlüsselung laufen lassen... die ist natürlich auch JavaScript-basiert, und daher grundlegend unsicher...

        nicht unbedingt, habe schon gpg in javascript irgendwo gesehen..

      2. Hallo,

        wozu willst du ein Captcha einbauen, wenn du es dann eh automatisch lösen lässt? Dann wäre es wohl einfacher das Captcha generell nur dann einzubauen, wenn JS ausgeschaltet ist.

        Für eine Überprüfung, die bei eingeschaltetem JS funktionieren soll, würde ich per onkeydown (oder onkeyup, oder oder oder) einen Zähler mitlaufen lassen, welcher zählt, wie oft irgendeine Taste gedrückt wurde. Wenn der am Ende 0 ist, wurde offenbar keine Taste gedrückt. Dann ist es naheliegend, dass kein Mensch am Werk ist. Oder man könnte eine Stoppuhr bauen, die z. B. die Zeit des Ausfüllens des Login-Formulars feststellt, etc. Da gibt es endlos viele Ideen.

        Grafische Captcha sind im übrigen aber kein großes Problem mehr für Spambots, wovon du offensichtlich auszugehen scheinst. Ich empfehle dir ein wenig Zeit zu investieren und dich über gfx Captchas zu informieren. Z. B. "Breaking Captchas" als Suchbegriff bei einer weithin bekannten Suchmaschine verwenden. Gleich der erste Treffer liefert dir einen Bericht über das automatisierte Lösen eines qualitativ hochwertigen gfx-Captcha.

        Gruß,
        Marcel

        1. Hallo,

          wozu willst du ein Captcha einbauen, wenn du es dann eh automatisch lösen lässt? Dann wäre es wohl einfacher das Captcha generell nur dann einzubauen, wenn JS ausgeschaltet ist.

          Ja, so ähnlich war es gemeint... aber einbauen muss man es ja generell, schließlich weiß man beim Generieren der Seite noch nicht, ob der User JS aktiv hat oder nicht... also erst einbauen und dann per JS abschalten... dachte ich mir.

          Für eine Überprüfung, die bei eingeschaltetem JS funktionieren soll, würde ich per onkeydown (oder onkeyup, oder oder oder) einen Zähler mitlaufen lassen, welcher zählt, wie oft irgendeine Taste gedrückt wurde. Wenn der am Ende 0 ist, wurde offenbar keine Taste gedrückt. Dann ist es naheliegend, dass kein Mensch am Werk ist. Oder man könnte eine Stoppuhr bauen, die z. B. die Zeit des Ausfüllens des Login-Formulars feststellt, etc. Da gibt es endlos viele Ideen.

          Das klingt gut!

          Grafische Captcha sind im übrigen aber kein großes Problem mehr für Spambots, wovon du offensichtlich auszugehen scheinst. Ich empfehle dir ein wenig Zeit zu investieren und dich über gfx Captchas zu informieren. Z. B. "Breaking Captchas" als Suchbegriff bei einer weithin bekannten Suchmaschine verwenden. Gleich der erste Treffer liefert dir einen Bericht über das automatisierte Lösen eines qualitativ hochwertigen gfx-Captcha.

          Hm nein, das wusste ich nicht... diese Teile werden so oft überall eingesetzt, dass ich annahm, das müsste recht sicher sein. Dann macht man es eben anders: Ein Fisch schwimmt im...? Eingabe => Wasser

          *g* ein paar dumme Fragen eben... oder sowas in der Art... ist ja nur für die Leute, die kein JS haben.

          Vielen Dank erstmal! Morgen nochmal etwas Googlen und dann wird sich schon was finden :-)

          Grüße
          Lars

          1. Hallo,

            keine Ahnung, ob du hier noch reinschaust.

            Fürs Archiv: Ein weiterer Link zu einem Programm, welches angeblich seit längerem nicht mehr weiterentwickelt wird, wäre dieser hier: http://caca.zoy.org/wiki/PWNtcha

            Auf der Seite werden verschiedenste CAPTCHA vorgestellt, kommentiert und die Rate angegeben, mit welcher Wahrscheinlichkeit dieses von dem Programm geknackt werden kann.

            Auch die CAPTCHA mit dem Vervollständigen von Sätzen (oder Lösen mathematischer Aufgaben) sind zwar eine gute Idee, bringen aber Probleme bei der Implementierung mit sich. Wie oft kann man beispielsweise nach "Wasser" (dein Beispiel) fragen, ohne dass sich die Frage wiederholt? Es würde dann genügen Schlagworte aus dem CAPTCHA zu entziffern und die vermeindliche Lösung aus einem Pool möglicher Lösungen auszuwählen.

            Wenn es unbedingt ein CAPTCHA sein muss, dann würde ich ein CSS CAPTCHA empfehlen. Wenn du ein Beispiel brauchst, was damit gemeint ist hilft zum wie immer die bekannte Suchmaschine. (Ich habe oben eine URL angeben (.../sample.php), wo auch Eines dargestellt wird.)

            Gruß,
            Marcel

  2. Hi,

    ich war in letzter Zeit mehrmals am überlegen, wie ein Spamschutz wohl aussehen könnte, der den Benutzer nicht belästigt.

    Meine Kombination verschiedener Methoden funktioniert bislang äußerst zuverlässig.

    Bisher hatte ich im Formular ein zusätzliches Textfeld, welches ich mit CSS weit außerhalb des sichtbaren Bereichs positioniert hatte.

    Zum einen ist es unsinnig, das Feld so zu positionieren - display:none ist da weitaus besser (für Screenreader). Zum anderen reicht *ein* Feld nicht immer aus.

    Da die Spambots anscheinend zum Großteil kein JavaScript interpretieren, wollte ich bei ausgeschaltetem JavaScript die gängige Bild-Kombination einsetzen. Also Zahlen/Buchstaben als Grafik, die der Benutzer dann ins Textfeld eintragen muss. Dies scheint ja für Spambots ein Problem darzustellen.

    Wie Du inzwischen ja erfahren hast, gibt es keine sicheren Captchas.

    Spambots können kein JS

    damit hast Du vermutlich zwar (noch) Recht, aber gut 3% der Besucher verweigern Javascript leider auch... daher ist eine reine Javascriptlösung - die vermutlich auch funktionieren würde - nur dann eine Option, wenn Du bereit bist, diese Besucher auszuschließen.

    freundliche Grüße
    Ingo

    1. Hallo Ingo,

      Bisher hatte ich im Formular ein zusätzliches Textfeld, welches ich mit CSS weit außerhalb des sichtbaren Bereichs positioniert hatte.
      Zum einen ist es unsinnig, das Feld so zu positionieren - display:none ist da weitaus besser (für Screenreader). Zum anderen reicht *ein* Feld nicht immer aus.

      Das stimmt wohl, aber ich hab gelesen, dass Spammer das display:none; auswerten und das Feld dann ebenfalls ignorieren.

      Aber von dieser Methode möcht ich ja ohnehin weg...

      Spambots können kein JS
      damit hast Du vermutlich zwar (noch) Recht, aber gut 3% der Besucher verweigern Javascript leider auch... daher ist eine reine Javascriptlösung - die vermutlich auch funktionieren würde - nur dann eine Option, wenn Du bereit bist, diese Besucher auszuschließen.

      Ja, wie gesagt: Die JavaScript-Lösung soll den Nutzer nur von Eingeben irgendwelcher Captchas, Antworten auf Fragen, Rechenaufgaben, ... bewahren. Kein JavaScript => Herkömmliche Methode. Ausschließen wollte ich niemanden, und reine JS-Lösungen verachte ich zutiefst ;-)

      Sehr interessant deine Seite! Ich hab sie jetzt nur überflogen, werde aber ziemlich sicher deine Ideen aufgreifen. Vielen Dank!

      Grüße
      Lars

      1. Hi,

        Zum einen ist es unsinnig, das Feld so zu positionieren - display:none ist da weitaus besser (für Screenreader). Zum anderen reicht *ein* Feld nicht immer aus.

        Das stimmt wohl, aber ich hab gelesen, dass Spammer das display:none; auswerten und das Feld dann ebenfalls ignorieren.

        wenn Du das in einer externen CSS-Datei angibst, dann wohl kaum.

        Aber von dieser Methode möcht ich ja ohnehin weg...

        warum? Sie funktioniert bei einem Großteil der Spam-Bots.

        Ja, wie gesagt: Die JavaScript-Lösung soll den Nutzer nur von Eingeben irgendwelcher Captchas, Antworten auf Fragen, Rechenaufgaben, ... bewahren. Kein JavaScript => Herkömmliche Methode.

        ... die wie gesagt auch gar nicht sicher ist.

        freundliche Grüße
        Ingo