Hallo
ich hab dieses Verhalten auch schon mal gesehen (auf der Doku-Seite), der Sache aber keine große Bedeutung beigemessen.
Ich hab mir das jetzt mal angeschaut. Folgende Funktionen in /include/inc_lib/general.inc.php sind da mit von der Partie...
Code: Select all
function getFormTrackingValue() {
//creates a new form tracking entry in database
//returns a <input type="hidden">
$ip = getRemoteIP();
$hash = md5($ip.$GLOBALS['phpwcms']["db_pass"].date('G'));
$entry_id = time();
if(!empty($GLOBALS['phpwcms']["form_tracking"])) {
$sql = "INSERT INTO ".DB_PREPEND."phpwcms_formtracking SET ";
$sql .= "formtracking_hash = '".$hash."', ";
$sql .= "formtracking_ip = '".aporeplace($ip)."'";
if($entry_created = mysql_query($sql, $GLOBALS['db'])) {
$entry_id = mysql_insert_id($GLOBALS['db']);
}
}
return '<input type="hidden" name="'.$hash.'" value="'.$entry_id.'" />';
}
function checkFormTrackingValue() {
//compare given tracking value against db tracking entry
$ip = getRemoteIP();
$hash1 = md5($ip.$GLOBALS['phpwcms']["db_pass"].date('G'));
$hash2 = md5($ip.$GLOBALS['phpwcms']["db_pass"].date('G', time()-3600)); //max form delay of 1 hour
$valid = false;
if(isset($_POST[$hash1])) {
// form method POST
$entry_id = intval($_POST[$hash1]);
$valid = true;
unset($_POST[$hash1]);
} elseif(isset($_POST[$hash2])) {
// form method POST 1 hour ago
$entry_id = intval($_POST[$hash2]);
$valid = true;
unset($_POST[$hash2]);
} else {
// hm, no hash means - ERROR
$valid = false;
}
return $valid;
}
Die erste Funktion platziert ein verstecktes Eingabefeld in den Formularen, welches einen hash enthält.
Beim Absenden des Formulars überprüft die zweite Funktion, ob dieser hash mitgeschickt wurde (Spamschtz). Dabei wird ein max. eine Stunde alter hash akzeptiert. Wenn ein "altes" Formular (z.Bsp. aus dem Browsercache
) abgeschickt wird, wird der euch bekannte Fehler ausgegeben. Das würde auch erklären, warum das Formular beim zweiten Versuch (also nach Reload
) anstandslos abgeschickt wird.
Vielleicht lieg ich ja auch völlig daneben, aber für mich sieht das aus, wie eben beschrieben...
Grüße Heiko.