Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Kontaktformular Spamschutz über Zeitabfrage???

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
ole1210
PostRank 10
PostRank 10
Beiträge: 7464
Registriert: 12.08.2005, 10:40
Wohnort: Olpe

Beitrag von ole1210 » 05.07.2006, 15:26

Hallo Forum,

seit einigen Tagen werden nen paar Kontaktformulare von mir zugespammt. Irgend nen Bot scheint die für Kommentarfelder oder Gästebücher zu halten, da es sich ausschliesslich üm Viagra, Cialis etc. Links im HTML Format und im BB-Code handelt.

An hand der Logfiles sehe ich, das die Seite direkt aufgerufen wird und das zwischen Aufruf der Seite und Absenden der Seite nur ca. 1 Sekunde vergeht.

Gibt es ne Möglichkeit mit nem kleinen PHP-Code die Verweildauer auf dem Formular abzufragen, und alles was unter 5 Sekunden ist mit ner Fehlermeldung zu versehen?

Nen Captcha Bild möchte ich nur ungern verwenden. Ganz nett finde ich noch die Rechenaufgaben zu Schutz, hab darüber aber leider keine guten Infos/Tutorials gefunden.

Viele Grüße

Ole

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 05.07.2006, 15:42

Ganz anderer Ansatz: Werden in einzeilige Eingabefelder (<input ...>) Newlines eingegeben? Dann kannst du den Müll ganz einfach filtern:

Code: Alles auswählen

   if &#40;preg_match &#40;"/&#91;\r\n&#93;/", $name&#41; ||
       preg_match &#40;"/&#91;\r\n&#93;/", $strasse&#41; ||
       preg_match &#40;"/&#91;\r\n&#93;/", $ort&#41;&#41; &#123;
     $proto = $_SERVER&#91;'SERVER_PROTOCOL'&#93;;
     header &#40;"$proto 403 Forbidden"&#41;;
     echo "<html><head><title>403 Forbidden</title></head><body><h1>Forbidden</h1><p>Due to abuse, you are not allowed to access this page.</p></body></html>";
     exit &#40;&#41;;
   &#125;
Bei Textarea-Feldern hast du so natürlich keine Chance ...

Edit: Textarea-Felder dürfen in die Prüfung natürlich auch nicht einbezogen werden, da man in diese ja auch ganz regulär Zeilenumbrüche eingeben kann.

cu, Robo :)
Zuletzt geändert von robo am 05.07.2006, 19:28, insgesamt 1-mal geändert.

ole1210
PostRank 10
PostRank 10
Beiträge: 7464
Registriert: 12.08.2005, 10:40
Wohnort: Olpe

Beitrag von ole1210 » 05.07.2006, 15:53

Es handelt sich um einzeilige "Input" Felder. Vollkommen richtig.

Was sind "Newlines"? nen <br>?

Es werden solche Dinge eingegeben:
[*url*]https://himen.bee.pl[*/url*]
http*://*himen.bee*.pl
<*a href=https://himen.bee.pl*>buy diazepam<*/a*>
[*url=https://himen.bee.pl*]buy diazepam[*/url*]

Wo müsste dein Code hin? Vor "Submit"?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


oldInternetUser
PostRank 9
PostRank 9
Beiträge: 1250
Registriert: 19.03.2005, 12:52

Beitrag von oldInternetUser » 05.07.2006, 15:55

Schicke einfach bei der Formularausgabe ein hidden-Feld mit, das aktuelles Datum und Uhrzeit enthält, eventuell als base64-String. Dann werden diese Daten mit zurückgesandt - fehlen sie oder ist der Zeitabstand zu gering, so wird alles verworfen.

ole1210
PostRank 10
PostRank 10
Beiträge: 7464
Registriert: 12.08.2005, 10:40
Wohnort: Olpe

Beitrag von ole1210 » 05.07.2006, 15:58

@ oldInternetUser
Verlang bitte nicht zuviel von mir! ;-)
Nen Hidden-Feld bekomm ich noch hin. Da das aktuelle Datum rein zu packen wird schon schwer. Danach ist schluss mit meinem Wissen.

Ich kann einfache fertige PHP-Scripte lesen, anpassen, etc. Aber in die tiefe der Materie habe ich keinen Einblick!

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 05.07.2006, 16:19

ole1210 hat geschrieben:Es handelt sich um einzeilige "Input" Felder. Vollkommen richtig.

Was sind "Newlines"? nen <br>?
So ähnlich. Es sind ganz normale Zeilenumbrüche. Also das ASCII-Zeichen für einen Zeilenumbruch. https://de.wikipedia.org/wiki/Zeilenumbruch
ole1210 hat geschrieben:Es werden solche Dinge eingegeben:
[*url*]https://himen.bee.pl[*/url*]
http*://*himen.bee*.pl
<*a href=https://himen.bee.pl*>buy diazepam<*/a*>
[*url=https://himen.bee.pl*]buy diazepam[*/url*]
Handelt es sich um ein- oder mehrzeilige Eingaben? Wenn es jeweils einzeilige Eingaben sind, kannst du meine Methode vergessen.
ole1210 hat geschrieben:Wo müsste dein Code hin? Vor "Submit"?
Der Code müsste in das Script rein, das die Eingabe auswertet. Und zwar an die Stelle, bevor etwas mit den Daten gemacht wird, also bevor sie in die Datenbank geschrieben werden etc.

cu, Robo :)

ole1210
PostRank 10
PostRank 10
Beiträge: 7464
Registriert: 12.08.2005, 10:40
Wohnort: Olpe

Beitrag von ole1210 » 05.07.2006, 16:29

Ich kann dir leider nicht sagen, ob es ein oder mehrzeilige Eingaben sind. ich kann es nicht testen.

In der eMail die mich erreicht, ist allerdings für jeden Link (html, bb, etc.) ne neue Zeile angefangen, obwohl die alte Zeile noch nicht "voll" ist.

Werde deinen Code mal testen und Morgen berichten.

Normale Anfragen funktioneieren noch, also kann nix schief gehen.

Viele Grüße

Ole

cren
PostRank 6
PostRank 6
Beiträge: 379
Registriert: 04.06.2005, 16:30

Beitrag von cren » 05.07.2006, 16:31

Um die Idee von oldInternetUser aufzugreifen, so kannst es codieren:

<input type="hidden" name="erstertimestamp" value="<?php echo base64_encode(time()); ?>" />

Auswerten kannst es dann mit
<?php
if (base64_decode($_REQUEST["erstertimestamp"]) < time() - 60) // 60 sekunden
{
// formular abschicken
} else {
// formular nicht abschicken
}
?>

Wenn jemand mehr zu den bereits angesprochenen Rechenaufgaben weiß würde mich das auch brennend interessieren :)

ole1210
PostRank 10
PostRank 10
Beiträge: 7464
Registriert: 12.08.2005, 10:40
Wohnort: Olpe

Beitrag von ole1210 » 05.07.2006, 16:40

Erstmal Danke. Habe jetzt mal die Lösung von Robo eingebunden. Wenn bis Morgen Abend kein Spam mehr gekommen ist, dann scheint es zu fuktionieren. Dann werde ich wohl 14 Tage Ruhe haben, und anschliessend die Methode von Cren/oldInternetUser einbauen um erneut 14 Tage Ruhe zu haben.

Zu der Rechenaufgabe
Für Wordpress gibt es da nen fertiges Plugin. Aber es war mir zu mühsam, da den ganzen Code auseinander zu basteln, um an die relevanten Stellen zu kommen.

makemyday
PostRank 1
PostRank 1
Beiträge: 23
Registriert: 27.06.2005, 16:55
Wohnort: Gießen

Beitrag von makemyday » 05.07.2006, 17:02

Hier noch ein ganz einfache Methode:

Einfach ein textfeld mit CSS verstecken. am besten noch mit email oder homepage betiteln, damit der Bot auch so richtig scharf drauf ist, es auszufüllen. Normale Benutzer werden diese Feld niemals ausfüllen, da sie es nicht sehen.

Sobald dieses Feld ausgefüllt ist, einfach Formular nicht abschicken. So macht man sich die eigenart von solchen Bots zunutze, dass sie immer alle Felder zumüllen.

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 05.07.2006, 17:11

ole1210 hat geschrieben:Ich kann dir leider nicht sagen, ob es ein oder mehrzeilige Eingaben sind. ich kann es nicht testen.

In der eMail die mich erreicht, ist allerdings für jeden Link (html, bb, etc.) ne neue Zeile angefangen, obwohl die alte Zeile noch nicht "voll" ist.
Ok, das Formular wird also per Mail verschickt. Und es sind mehrere Zeilen, die dich erreichen. Jetzt bliebe noch zu klären, ob diese mehrere Zeilen in EIN Feld eingegeben wurden. Wenn ja, wird mein Code dich von dem Müll befreien.

Du hattest vermutet, dass irgendein Bot das Kontaktformular für ein Gästebuch hält.

Wenn das zutrifft, was ich vermute, dass versucht ein Bot, über dein Kontaktformular Spam an Dritte zu versenden. Dazu muss er sogar Zeilenumbrüche senden, denn er muss \nBCC: <mailadresse> übergeben. Und dagegen hilft mein Code, auch länger als 2 Wochen. :-)

Du kannst ja mal schauen, ob in den Mails irgendwo
BCC: <mailadresse>
vorkommt ...

cu, Robo :)

ole1210
PostRank 10
PostRank 10
Beiträge: 7464
Registriert: 12.08.2005, 10:40
Wohnort: Olpe

Beitrag von ole1210 » 05.07.2006, 18:34

@ Robo:
Jeppp, die Zeilen werden definitiv in EIN Feld eingegeben.

Der Bot versucht NICHT Spam an Dritte zu versenden. Das Problem hatte ich vor Monaten mal. Da waren die Felder auch mit sinnfreien Inhalten gefüllt und er hat versucht das von dir angesprochene BCC anzuhäöngen. Aber erfolglos!

Ich werd in einigen Tagen Nachricht geben, obs geholfen hat!

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 05.07.2006, 19:27

ole1210 hat geschrieben:Jeppp, die Zeilen werden definitiv in EIN Feld eingegeben.
Dann hilft mein Code.

Achja, ich vergass, bei meinem Code zu erwähnen, dass man selbstverständlich nur input-Felder in die Prüfung einbeziehen darf, keine textarea-Felder, da man in letztere ja auch ganz regulär Zeilenumbrüche eingeben kann.

cu, Robo :)

Michael1967
PostRank 9
PostRank 9
Beiträge: 2158
Registriert: 26.10.2005, 23:51

Beitrag von Michael1967 » 06.07.2006, 12:12

Man könnte das auch mit einer Funktion (erweiterbar) lösen. Hier werden dann alle Eingabefelder abgeprüft und der Spamversuch blockiert.

Code: Alles auswählen

function stopwords_check&#40;&#41;
&#123;
$text = array&#40;"Viagra", "diazepam"&#41;;

foreach &#40;$_POST as $fieldname => $fieldvalue&#41; &#123;
  foreach &#40;$text as $stopword_key => $stopword_value&#41; &#123;
   $pattern = "/.*$stopword_value.*/";
   if &#40;preg_match&#40;$pattern, $fieldvalue&#41;&#41; &#123;
   

 header&#40;"Location&#58; http&#58;//www.deineDomain/nospam.html"&#41;;
    exit;
   &#125;
  &#125;
 &#125;
&#125;

Metaman
PostRank 7
PostRank 7
Beiträge: 602
Registriert: 17.04.2004, 07:37
Wohnort: Wittenburg (Mecklenburg)

Beitrag von Metaman » 06.07.2006, 13:11

ansonsten helfen da nur Captcha´s
also diese kleinen Bildchen wo man was abschreiben muß.
Nachteil der sache, auch hier gibt es schon möglichkeiten diese Bilder automatisiert lesen zu können.....

Rechenaufgaben sind auch ok, nur hasse ich Kopfrechnen :lol:
darum hab ich mir mal was einfaches ausgedacht wo der User nur zählen muß
https://php.lexinet.de/verz-C/Captcha_ohne_Image.htm

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag