Hallo!
Derzeit wird mein Gästebuch von Spambots heimgesucht.
Ich habe mein Script so verändert, das ein Validationcode erzeugt wird und dieser erst eingeben werden muss.
Trotzdem kommen immer wieder neue Spameinträge.
register_globales sind auf off. Im Script prüfe ich, ob der Imagecode richtig ist, erst dann wird das Script weiter ausgeführt.
Die Eingabe von einem neuen Eintrag sieht so aus:
Der String aus dem Image wird in einer Session gespeichert: $_SESSION['string'] und wird dann im Script auf Gültigkeit geprüft:
Selbst ein IP Spamschutz bringt nichts (Das Gästebuch wird dann eben alle 5 min "besucht").
Ich will es aber auch nicht moderieren.
Jetzt frage ich mich nur, wie man an den Schutz der Imagevalidation umgehen kann?
Klar kann man ein Bild durch ein Programm auslesen, doch verwende ich schon extra eine Schriftart die man nicht so super lesen kann.
Oder ist in dem Script irgendetwas unsauber programmiert, was man ausnutzen könnte?
Bin über jede Hilfe / Tipps dankbar
Derzeit wird mein Gästebuch von Spambots heimgesucht.
Ich habe mein Script so verändert, das ein Validationcode erzeugt wird und dieser erst eingeben werden muss.
Trotzdem kommen immer wieder neue Spameinträge.
register_globales sind auf off. Im Script prüfe ich, ob der Imagecode richtig ist, erst dann wird das Script weiter ausgeführt.
Die Eingabe von einem neuen Eintrag sieht so aus:
Der String aus dem Image wird in einer Session gespeichert: $_SESSION['string'] und wird dann im Script auf Gültigkeit geprüft:
PHP:
if ($page == 'write'] {
session_start();
$email = strip_tags($_POST['email']);
$name = strip_tags($_POST['name']);
$comment = strip_tags($_POST['comment']);
$homepage = strip_tags($_POST['homepage']);
$wohnort = strip_tags($_POST['wohnort']);
$icq = strip_tags($_POST['icq']);
$msn = strip_tags($_POST['msn']);
$img_str = $_SESSION['string'];
$img_frm_str = $_POST['imgcode'];
$adminname = $settings[adminname];
$date = frdate();
if (strtoupper($img_str) == $img_frm_str) {
if (empty($name) && empty($comment) && empty($email)) {
$array = array("textcolor" => $settings['textcolor'], "error" => "$lang[9]", "error1" => "$lang[10]", "error2" => "$lang[11]", "back" => "$lang[12]");
echo $tpl->parse($tpl->get("error_1"), $array);
} else {
if (!ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+.([a-zA-Z]{2,3})$", $email)) {
$array = array("textcolor" => $settings['textcolor'], "error1" => "$lang[13]");
echo $tpl->parse($tpl->get("error_2"), $array);
} else {
if ($homepage != ''] {
if (substr($homepage, 0, 7) != "http://") {
$homepage = "http://" . $homepage;
}
}
if ($settings['spam'] == 'on'] {
$ip = $_SERVER[REMOTE_ADDR];
$get_log_time = getdate();
$log_time = "$get_log_time[minutes]";
fr_mysqlconnect($settings['dbhost'], $settings['dbuser'], $settings['dbpass'], $settings['dbname']);
$select = mysql_query("SELECT * FROM $settings[iptable]");
while ($entry = mysql_fetch_array($select)) {
if ((($entry[log_time]) > ($log_time + 2)) or (($entry[log_time]) < ($log_time -2))) {
mysql_query("DELETE FROM $settings[iptable] WHERE ip_adress = '$entry[ip_adress]'");
$entry[ip_adress] = 'del';
}
if ($ip == $entry[ip_adress]) {
$array = array("textcolor" => $settings['textcolor'], "error" => $lang[14], "back" => "$lang[12]");
echo $tpl->parse($tpl->get("error_3"), $array);
$ip = 'spam';
break;
}
}
if ($ip != 'spam'] {
mysql_query("INSERT INTO $settings[iptable] VALUES ('$ip'['$log_time']");
}
}
if ($ip != 'spam'] {
$comment = cleancomment($comment); // clean and format comment
fr_mysqlconnect($settings['dbhost'], $settings['dbuser'], $settings['dbpass'], $settings['dbname']);
mysql_query ("INSERT INTO $settings[gbooktable] VALUES (''['$name'['$email'['$wohnort'['$homepage'['$date'['$comment'['$icq'['$msn'['']");
// send emails
include("language/lang_$settings[lang].inc");
mail($email, $lang[16], $lang[17], "From: $settings[adminmail]");
mail($settings[adminmail], $lang[18], $lang[19], "From: $settings[adminmail]");
if (!empty($country)) {
include("language/lang_$country.inc");
} else {
$country = $settings['lang'];
include("language/lang_$country.inc");
}
$array = array("self" => "$PHP_SELF", "country" => "$_GET[country]", "insertdone" => "$lang[20]", "togbook" => "$lang[21]");
echo $tpl->parse($tpl->get("add_comment_done"), $array);
}
}
}
} else {
$array = array("textcolor" => $settings['textcolor'], "error" => $lang[28]);
echo $tpl->parse($tpl->get("error_2"), $array);
}
}
Selbst ein IP Spamschutz bringt nichts (Das Gästebuch wird dann eben alle 5 min "besucht").
Ich will es aber auch nicht moderieren.
Jetzt frage ich mich nur, wie man an den Schutz der Imagevalidation umgehen kann?
Klar kann man ein Bild durch ein Programm auslesen, doch verwende ich schon extra eine Schriftart die man nicht so super lesen kann.
Oder ist in dem Script irgendetwas unsauber programmiert, was man ausnutzen könnte?
Bin über jede Hilfe / Tipps dankbar