An einigen Stellen ist in den letzten Tagen über eine mögliche Sicherheitslücke in den XT:Commerce - Forks diskutiert worden. In der checkout_shipping_address.php wurde ein $_POST Parameter ohne Prüfung in die $_SESSION übernommen:
Code: Alles auswählen
$_SESSION['sendto'] = $_POST['address'];
Code: Alles auswählen
$_SESSION['sendto'] = (int)$_POST['address'];
In der "verwandten" Datei checkout_payment_address.php wurde schon eine "Absicherung" der Eingabe vorgenommen:
Code: Alles auswählen
$_SESSION['billto'] = xtc_db_prepare_input($_POST['address']);
Code: Alles auswählen
$_SESSION['billto'] = (int)$_POST['address'];
xtc_db_prepare_input.inc.php:
Nicht zuletzt durch die Diskusssion im XTC-Modified Forum haben wir uns auch noch die Funktion xtc_db_prepare_input() angesehen. Diese arbeitet in ihrer bisherigen Version leider nicht 100%ig zuverlässig (siehe auch Sicherheitspatch von Gambio). Bisher:
Code: Alles auswählen
$string = preg_replace('/union.*select.*from/i', '', $string);
return trim(stripslashes($string));
Code: Alles auswählen
$string = stripslashes($string);
$string = preg_replace('/union.*select.*from/i', '', $string);
return trim($string);
Hier noch mal der vollständige Code der Funktion, falls der ein oder andere noch nicht den Sicherheitspatch von Gambio von November 2009 implementiert hat:
Code: Alles auswählen
function xtc_db_prepare_input($string) {
if (is_string($string)) {
$string = stripslashes($string);
$string = preg_replace('/union.*select.*from/i', '', $string);
return trim($string);
} elseif (is_array($string)) {
reset($string);
while (list($key, $value) = each($string)) {
$string[$key] = xtc_db_prepare_input($value);
}
return $string;
} else {
return $string;
}
}
Mike