Trotzdem Spam

Hier werden Probleme rund um das Rechen Captcha behandelt

Moderator: frameguard

Trotzdem Spam

Beitragvon Toeb » 08.01.2007, 21:45

Hallo,

ich habe als erstes den Bilder-Captcha ausprobiert, hat aber nichts geholfen. Anschließend hab ich den Rechen-Captcha ausprobiert, auch nicht geholfen.
Konnte das irgendwie nicht glauben, dass die Bots so schlau sind, da hab ich das Bild, in dem die Rechnung dargestellt wird von der Seite entfernt, also es schafft kein Mensch mehr einen Beitrag hinzuzufügen, aber siehe da, es spammt und spammt weiter, gnadenlos!

Kann das sein, dass das Script schlecht ist und die Bots dies ohne Probleme lösen?

Die Einträge ab dem 7.1.06 wurden erstellt, obwohl die Rechnung nicht zu sehen war, ich hab das Captcha-Bild wieder eingefügt (am 8.1.07), damit ihr es sehen könnt und prüfen, ob alles stimmt.

Langsam regt es mich ziemlich auf, ein so schönes und leicht einzufügendes Script, was aber leider nicht mehr funktioniert??

Hier der Link:
http://www.elektronische-tanzmusik.net/index.php?feld=guestbook

Grüße Toeb
Toeb
 
Beiträge: 7
Registriert: 08.01.2007, 21:35

Re: Trotzdem Spam

Beitragvon Rob [Admin] » 08.01.2007, 22:41

Toeb hat geschrieben:[...]also es schafft kein Mensch mehr einen Beitrag hinzuzufügen, aber siehe da, es spammt und spammt weiter, gnadenlos![...]


Dies lässt in der Tat auf eine schlechte Programmierung zurückschliessen.
Denn wenn man von Hand keinen Eintrag mehr machen kann, dann kann es nur ein Schlupfloch geben, welches der Bot ausnützt.

Poste doch mal deine php Datei mit dem Gästebuch.
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon Toeb » 08.01.2007, 23:41

Also, die Seite bei der man einen Eintrag hinzufügt:

verkürzt:
Code: Alles auswählen
<?
     session_start();
?>
<form action="http://www.elektronische-tanzmusik.net" method="post" name="eintr" onsubmit="return test()">
<img src="captcha/captcha.php" border="0" title="Sicherheitscode">
<input type="text" name="sicherheitscode" size="4" maxlength="4">
<input type="Submit" value="Eintragen!">


Die Sendeseite, ebenfalls verkürzt:
Code: Alles auswählen
<?
session_start();
function encrypt($string, $key)
{
$result = '';
for($i=0; $i<strlen($string); $i++)
{
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "123456");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
            
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam'])
{
unset($_SESSION['rechen_captcha_spam']);
// Falls die Rechnung stimmt wird folgendes ausgeführt

...mysql_query("INSERT INTO...

} else {
// Falls das Ergebnis nicht stimmt

Die Rechnung stimmt nicht, bitte gehen Sie zurück...
}


Und dann gibt es nur noch die Captcha Datei:
Code: Alles auswählen
<?php
session_start();
unset($_SESSION['rechen_captcha_spam']);
$zahl1 = rand(5,9); //Erste Zahl 5-9
$zahl2 = rand(0,4);  //Zweite Zahl 0-4
$operator = rand(1,2); // + oder -

if($operator == "1"){
   $operatorzeichen = " plus ";
   $ergebnis = $zahl1 + $zahl2;
}else{
   $operatorzeichen = " minus ";
   $ergebnis = $zahl1 - $zahl2;
}

function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key))-1, 1);
   $char = chr(ord($char)+ord($keychar));
   $result.=$char;
}
return base64_encode($result);
}

$_SESSION['rechen_captcha_spam'] = encrypt($ergebnis, "12345678"); //Key
$_SESSION['rechen_captcha_spam'] = str_replace("=", "", $_SESSION['rechen_captcha_spam']);
       
$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,0,0,0);
$hintergrund = imagecolorallocate($img,149,164,173);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>


Spammt aber gnadenlos weiter, selbst wenn ich
"<img src="captcha/captcha.php" border="0" title="Sicherheitscode">"
auf der Seite in der man den Eintrag schreibt, weg nehme.
Ein "normaler" Mensch kann dann keinen Eintrag mehr schreiben, weil er die Rechnung nicht sieht, aber die Bots schaffen es trotzdem?
Toeb
 
Beiträge: 7
Registriert: 08.01.2007, 21:35

Beitragvon Rob [Admin] » 08.01.2007, 23:46

Lass dir in der Datei mal folgende Werte ausgeben:

echo $_SESSION['rechen_captcha_spam'];
echo $sicherheits_eingabe;

Gibt es 2 mal das selbe?
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon Toeb » 09.01.2007, 00:01

Steht immer was anderes, egal ob das Ergebnis stimmt, oder nicht.
Kannst es selbst prüfen, die beiden echos stehen immer in der letzten Zeile, wenn man einen Eintrag abschickt.

http://www.elektronische-tanzmusik.net/ ... =guestbook
Toeb
 
Beiträge: 7
Registriert: 08.01.2007, 21:35

Beitragvon Rob [Admin] » 09.01.2007, 08:36

Ich sehe nicht, dass es 2 Werte sind, mach darum bitte mal folgendes:

echo "S:".$_SESSION['rechen_captcha_spam']."<br>";
echo "E:".$sicherheits_eingabe;

Es scheint, als würde irgendwas mit deiner Session oder dem übergebenen Wert nicht übereinstimmen.
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon Toeb » 09.01.2007, 22:05

Also, ich habe jetzt einen Break eingebaut und hinter jeden echo den Zeilenwert geschrieben, also "erste Zeile" und "zweite Zeile".

Kannst es ja selbst mal ausprobieren, wenn man kein, oder ein falsches Ergebnis eingibt, sind beide Werte unterschiedlich. Gibt man das richtige Ergebnis an, existiert kein erster Wert, sondern nur der Zweite.

Aber am besten du schaust es dir selber an:
http://www.elektronische-tanzmusik.net/ ... =guestbook

Ich bedanke mich schon einmal, für deine Mühen und Interesse mir zu helfen ;)
Toeb
 
Beiträge: 7
Registriert: 08.01.2007, 21:35

Beitragvon Rob [Admin] » 09.01.2007, 22:14

Ok, dass der Wert nicht mehr angezeigt wird, wenn er korrekt ist, das ist klar, da ein unset($_SESSION['rechen_captcha_spam']); die Session löscht, somit funktioniert die Überprüfung, und es wird nur das in der if Anweisung ausgeführt, wenn das Captcha richtig eingegeben wurde.

Von daher ist der Fehler so nicht ersichtlich. Poste mal deine ganze Gästebuchdatei, da mit dem Ausschnitt, den du angegeben hast, der Fehler nicht versteckt ist.
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon Toeb » 09.01.2007, 22:28

Der Ausschnitt zeigt eigentlich alles relevante, aber ok.
Ich muss anmerken, dass der Code und das HTML nicht sehr sauber und übersichtlich geschrieben sind. Ist schon ne Weile her und hatte damals noch keinen sehr guten Stil :oops:

Dazu muss ich sagen, dass alle Dateien in eine Indexseite includet werden, die das Grundlayout enthält. Bei den Dateien neu.txt und send.txt wird jeweils beim Aufruf durch eine Abfrage auf der Indexseite ein session_start(); ganz oben eingefügt.

Hier die Dateien:
http://elektronische-tanzmusik.net/neu.txt
http://elektronische-tanzmusik.net/send.txt
http://elektronische-tanzmusik.net/captcha.txt
Toeb
 
Beiträge: 7
Registriert: 08.01.2007, 21:35

Beitragvon Rob [Admin] » 09.01.2007, 23:42

Evt. eine Schwachstelle, welche hier aufgedeckt wurde.

Ersetze mal folgendes:

if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam'])

mit dem hier:

if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam'] AND is_numeric($_POST["sicherheitscode"]) == true AND $sicherheits_eingabe == true)

und schreibe mir, ob sich die Spam Einträge nun in Grenzen halten /aufhören.
Rob [Admin]
Site Admin
 
Beiträge: 143
Registriert: 23.12.2006, 12:27

Beitragvon Toeb » 10.01.2007, 00:08

Ok, danke.
Jetzt funktioniert es, hab mal alle Spams rausgelöscht. Jetzt heißt es abwarten...

Kannst ja, wenn du magst auch mal ausprobieren, einen Eintrag zu verfassen, bei dem das Ergebnis stimmt und bei einem falschen. Kann den Eintrag ja nachträglich löschen, falls du möchtest :)

Vielen Dank und viele Grüße
Toeb

PS: Werde auf jeden Fall weiterhin die weiteren Infos in diesem Thread dazu posten.
Toeb
 
Beiträge: 7
Registriert: 08.01.2007, 21:35

Beitragvon Toeb » 11.01.2007, 00:10

Also, jetzt ist ein Tag vergangen und noch kein weiterer Spam, dies ist schon ein großer Fortschritt.

Dann rat ich aber dringends, dies in dem Tutorial auf dieser Seite auch zu ändern!

Dies hier:
if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam'])

mit dem hier:

if($sicherheits_eingabe == $_SESSION['rechen_captcha_spam'] AND is_numeric($_POST["sicherheitscode"]) == true AND $sicherheits_eingabe == true)


Hab ja alles aus dem Tutorial.

Vielen vielen Dank für die Unterstützung! Sollte es Neuigkeiten geben, melde ich mich natürlich wieder ;)
Toeb
 
Beiträge: 7
Registriert: 08.01.2007, 21:35

Danke

Beitragvon DarkOcean » 21.03.2007, 22:36

Super, genau hier ist auch mein Problem beschrieben worden, nur verwende ich das normale Bild Captcha. Die Lösung funktioniert aber bei mir auch :D

Hab das gleich mal eingebaut, aber mit einer kleinen abwandlung:
Code: Alles auswählen
isset($_POST["sicherungscode"]) && is_numeric($_POST["sicherungscode"]) == true && strlen($_POST["sicherungscode"]) == 5


Bei mir sind es 5 Zahlen, die zurückkommen, deshalb die Abfrage auf 5.

Es gab übrigens bei mir auch zwei PHP-Error-Log einträge:

[20-Mar-2007 03:10:44] PHP Notice: Undefined index: sicherungscode in gastbuch.php on line 15
[20-Mar-2007 03:10:44] PHP Notice: Undefined index: captchaspam in gastbuch.php on line 16

Werde das bei mir auch mal beobachten und es wäre wichtig, das im Tutorial abzuändern, da wahrscheinlich sehr viele dieses Problem haben.

Grüße
DarkOceaN
Kaum macht man es richtig, geht es!!

www.nico-hanus.de
DarkOcean
 
Beiträge: 1
Registriert: 21.03.2007, 22:23


Zurück zu Rechen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron