Skip to content
Extraits de code Groupes Projets
Valider 18458997 rédigé par Fil's avatar Fil
Parcourir les fichiers

révision de "magic_quotes" pour qu'il nettoie aussi les caractères %00

parent 5f25814a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -793,7 +793,7 @@ function spip_register_globals() { ...@@ -793,7 +793,7 @@ function spip_register_globals() {
else { else {
foreach (array('_SERVER', '_COOKIE', '_POST', '_GET') as $_table) { foreach (array('_SERVER', '_COOKIE', '_POST', '_GET') as $_table) {
foreach ($GLOBALS[$_table] as $var => $val) { foreach ($GLOBALS[$_table] as $var => $val) {
if (!isset($GLOBALS[$var]) if (!isset($GLOBALS[$var]) # indispensable securite
AND isset($GLOBALS[$_table][$var]) AND isset($GLOBALS[$_table][$var])
AND ($_table == '_SERVER' OR !in_array($var, $refuse_gpc)) AND ($_table == '_SERVER' OR !in_array($var, $refuse_gpc))
AND ($_table <> '_COOKIE' OR !in_array($var, $refuse_c))) AND ($_table <> '_COOKIE' OR !in_array($var, $refuse_c)))
...@@ -804,34 +804,27 @@ function spip_register_globals() { ...@@ -804,34 +804,27 @@ function spip_register_globals() {
} }
// Magic quotes : on n'en veut pas // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ;
function magic_unquote(&$t) { // supprimer aussi les eventuels caracteres nuls %00, qui peuvent tromper
// la commande file_exists('chemin/vers/fichier/interdit%00truc_normal')
function spip_desinfecte(&$t) {
static $magic_quotes;
if (!isset($magic_quotes))
$magic_quotes = @get_magic_quotes_gpc();
if (is_array($t)) { if (is_array($t)) {
foreach ($t as $key => $val) { foreach ($t as $key => $val) {
if (!is_array($val) if (!is_array($val)
OR !($t['spip_recursions']++)) # interdire les recursions OR !isset($t['spip_recursions'])) { # interdire les recursions
magic_unquote($t[$key], $key); $t['spip_recursions'] = true;
spip_desinfecte($t[$key]);
}
} }
} else } else {
$t = stripslashes($t); $t = str_replace(chr(0), '', $t);
} if ($magic_quotes)
$t = stripslashes($t);
}
// Annuler les magic quotes Sur GET/POST/COOKIE et GLOBALS, s'il y en a
function spip_magic_unquote() {
global $_GET, $_POST, $_COOKIE;
magic_unquote($_GET);
magic_unquote($_POST);
magic_unquote($_COOKIE);
# if (@ini_get('register_globals')) // pas fiable
magic_unquote($GLOBALS);
# et a la fin supprimer la variable anti-recursion devenue inutile
# (et memenuisible, notamment si on teste $_POST)
unset($_GET['spip_recursions']);
unset($_POST['spip_recursions']);
unset($_COOKIE['spip_recursions']);
unset($GLOBALS['spip_recursions']);
} }
?> ?>
...@@ -288,14 +288,20 @@ foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $_table) { ...@@ -288,14 +288,20 @@ foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $_table) {
$GLOBALS[$http_table_vars] = & $GLOBALS[$_table]; $GLOBALS[$http_table_vars] = & $GLOBALS[$_table];
} }
// Securite : nettoyer les magic quotes \' et les caracteres nuls %00
spip_desinfecte($_GET);
spip_desinfecte($_POST);
spip_desinfecte($_COOKIE);
# if (@ini_get('register_globals')) // pas fiable
spip_desinfecte($GLOBALS);
# a la fin supprimer la variable anti-recursion devenue inutile
# (et meme nuisible, notamment si on teste $_POST)
unset($_GET['spip_recursions']);
unset($_POST['spip_recursions']);
unset($_COOKIE['spip_recursions']);
unset($GLOBALS['spip_recursions']);
// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
@set_magic_quotes_runtime(0); @set_magic_quotes_runtime(0);
if (@get_magic_quotes_gpc()
AND strstr(
serialize($_GET).serialize($_POST).serialize($_COOKIE),
'\\')
) {
spip_magic_unquote();
}
// Remplir $GLOBALS avec $_GET et $_POST (methode a revoir pour fonctionner // Remplir $GLOBALS avec $_GET et $_POST (methode a revoir pour fonctionner
// completement en respectant register_globals = off) // completement en respectant register_globals = off)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter