Ich habe schon einen Artikel, der einen Bug behebt, wodurch es möglich war, eine Email an mehrere zu schicken.
Dieser hier hat damit aber nichts zutun, damit ihr nichts verwechselt.. der andere ist wichtig!
http://www.kitnetwork.de/wbb/index.php?p…ead&threadID=68
Ich bin der Meinung, nur darauf basiert diese Codeänderung, dass Bots, welche Spam über das Kontaktformular verschicken, sich den HTML Code der durch das PHPKIT erstellt wird, "schnappen" und ihn ab sofort selber verwenden.
Damit meine ich, dass sie auf die Homepage kommen, Quelltext schnappen, es bei sich selber abspeichern und fort an, von dem Formular, was sie sich gespeichert haben, Spam losschicken.
Schicken tun sie das an die contact.php des PHPKIT's, da sie von der auch das Formular geschnappt haben!
Änderungen am Formular selbst, das entfernen des Links zum Formular, all diers bringt nix, da sie ja das Formular selbst bei sich haben und es nur zu euch schicken.
Wie handelt man dagegen?
Sollten Bots so vorgehen, wie oben beschrieben, dann muss man ein Formular flexibel mit abfragen machen. Das bedeutet, die INPUT Felder müssen stetig andere Namen haben. Wie das? Wie soll das gehen? Die einfachste Lösung war in meinen Augen, einen Timestamp vorzuschalten. Ein Timestamp ist ein aus Ziffern bestehender Zahlencode der den aktuellen Zeitstempel in Sekunden in sich trägt, bzw aus dem besteht er! Nun noch eine Abfrage einbauen, damit das Formular trotzdem noch genutz werden kann, mit teilweise festen Werten.
Funktionieren tut das Formular weiterhin, wie zuvor auch.
Was nun nicht mehr geht ist, dass jemand x Minuten nachdem er das Formular aufrief, noch abschicken kann. Man muss also innerhalb von bsp. 10 Minuten seinen Text geschrieben haben und diesen abgeschickt haben.
Sollten Bots nun das Formular gespeichert haben, so haben sie den Zeitstempel von damals, wo sie sich das Formular geholt haben, also oftmals weit über 10 Minuten her.
Sollten Bots wirklich so vor gehen, dann könnten hiermit 90% der Spams ausbleiben, denn irgendwelche kommen immer durch (manuelles eintragen oder so..)!
Wer das versuchen will nimmt Änderungen an der contact.php vor..
contact.php mit einem Editor öffnen.
suche:
PHPKIT 1.6.03
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
|
if (isset($_POST['action'])) {
$contact_message=$_POST['contact_message'];
$contact_subject=$_POST['contact_subject'];
$contact_email=$_POST['contact_email'];
$contact_name=$_POST['contact_name'];#
$ACTION=$_POST['action'];
}
else $ACTION='view';
|
PHPKIT 1.6.1
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
if(isset($_POST['action'])) {
$ACTION=$_POST['action'];
$contact_message=$ENV->_post('contact_message');
$contact_subject=$ENV->_post('contact_subject');
$contact_email=$ENV->_post('contact_email');
$contact_name=$ENV->_post('contact_name');
}
else
$ACTION='view';
|
ersetze es in
beiden PHPKIT Versionen damit:
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
unset($contact_message);unset($contact_subject);unset($contact_email);unset($contact_name);
$time = time();
$minuten = 1;
$timestamp_array_1 = array("0","1","2","3","4","5","6","7","8","9");
$timestamp_array_2 = array("a","b","c","d","e","f","g","h","i","j");
$formular_array = array("name","email","subject","message");
$formular_array_key = str_replace($timestamp_array_1,$timestamp_array_2,$time);
$formular_contact_name = base64_encode($formular_array_key."_contact_name");
$formular_contact_email = base64_encode($formular_array_key."_contact_email");
$formular_contact_subject = base64_encode($formular_array_key."_contact_subject");
$formular_contact_message = base64_encode($formular_array_key."_contact_message");
if(isset($_POST['action'])) {
$formular_array_keys1 = array_keys($_POST);
for($i=0;$i<count($formular_array_keys1);$i++) {
$formular_array_key_explode = explode("_",base64_decode($formular_array_keys1[$i]));
$formular_array_keys_str_replace = str_replace($timestamp_array_2,$timestamp_array_1,$formular_array_key_explode[0]);
$formular_array_keys2[$i] = $formular_array_keys_str_replace."_".$formular_array_key_explode[1]."_".$formular_array_key_explode[2];
if(in_array($formular_array_key_explode[2],$formular_array)) {
if(($time-$formular_array_keys_str_replace) <= (60*$minuten)) {
//$formular_error = "nein";
if($formular_array_key_explode[2] == "message") eval("\$contact_message=\$_POST['".base64_encode($formular_array_key_explode[0]."_contact_message")."'];");
if($formular_array_key_explode[2] == "subject") eval("\$contact_subject=\$_POST['".base64_encode($formular_array_key_explode[0]."_contact_subject")."'];");
if($formular_array_key_explode[2] == "email") eval("\$contact_email=\$_POST['".base64_encode($formular_array_key_explode[0]."_contact_email")."'];");
if($formular_array_key_explode[2] == "name") eval("\$contact_name=\$_POST['".base64_encode($formular_array_key_explode[0]."_contact_name")."'];");
$ACTION=$_POST['action'];
} else {
//$formular_error = "ja";
$ACTION='view';
}
}
}
}
else $ACTION='view';
|
templates/contact.htm
folgende Zeichenfolgen suchen: (stehen alle einzeln!)
|
Quellcode
|
1
2
3
4
|
name="contact_name"
name="contact_email"
name="contact_subject"
name="contact_message"
|
und ersetzt sie wie folgt:
|
Quellcode
|
1
2
3
4
|
name="$formular_contact_name"
name="$formular_contact_email"
name="$formular_contact_subject"
name="$formular_contact_message"
|
also:
name="$formular_contact_name"
das rote hinzufügen...
Für das testen bei der 1.6.1 bedanke ich mich bei Headless
Der direkte Download befindet sich bei den "Verwandten Downloads" hier unter dem Artikel.