Securité protection automatique contre magicquote et register_globals

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 191 fois - Téléchargée 17 fois

Contenu du snippet

Voila cette petite source préviens des danger de configuration de certains serveurs.
Il suffit d'inclure ce fichier en haut de chaque page (pas au milieu) pour se protéger.

Source / Exemple :


<?php
//FONTION DE PROTECTION DES QUOTES
function Protege_Quote(&$valeur,$cle){
	if(is_array($valeur)){
		array_walk ($valeur, 'Protege_Quote');
	}else{
		$valeur=stripslashes($valeur);
	}
}
//FAILLES CORRIGEES EN VERSION 6
if(version_compare(PHP_VERSION,'6.0.0','<')==1){
	//PROTECTION CONTRE LE REGISTER GLOBAL
	if (@ini_get('register_globals')) {
	  foreach ($_REQUEST as $clef => $valeur){
	    unset($GLOBALS[$clef]);
	    
	  }
	 }
	 //PROTECTION CONTRE LES MAGIC QUOTE
	if(get_magic_quotes_gpc()){
		
		array_walk ($_POST, 'Protege_Quote');
		array_walk ($_GET, 'Protege_Quote');
		array_walk ($HTTP_COOKIE_VARS, 'Protege_Quote');
		array_walk ($_COOKIE, 'Protege_Quote');
	}
}
?>

Conclusion :


Je mets cette source surtout à titre d'information.

A voir également

Ajouter un commentaire

Commentaires

codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
A mon avis le probleme doit se traiter au cas par cas et ne peut-etre utilisé. Ca va dépendre du code de la personne, et de comment il s'y prends.
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
Souvent, quand on fait une liste de checkbox, ou qu'on fait un "groupe" de champs qui vont ensemble, on utilise plus de simples noms dans l'attribut name des input, on ajoute des crochets voir des "clefs" dans ces crochets, et array_walk ne fouille qu'une dimension de ton tableau.
avec des champs comme ca :

ton $_POST aura l'air de :
array(
truc => array(
[0]=>"valeur premier input"
[1]=>"valeur second input"
)
)

et avec un array_walk non recursif, tu te trouves a appliquer addslashes sur $_POST['truc'], qui est un array, ca peut poser quelques problemes :)

avec certaines versions de php, il existait un caractere chinois invalide utf, j'ai jamais reussi a reproduire la faille par contre... j'imagine que ma version de php est trop recente pour ca
plus de doc a ce sujet ici :
http://www.haypocalc.com/blog/index.php/2008/01/26/124-failles-securite-unicode
ca explique que beaucoup utilisent souvant mysql_real_escape_string, a la place de addslashes.

si tu veux vraiment simuler un global_register a off, il te faudrait alors faire des choses comme :
foreach ($_REQUEST as $clef => $valeur){ unset($$clef); }
mais le probleme, c'est sur une url du style : page.php?$_GET=truc ca risquerait de donner un comportement etonnant
TheWeasel47
Messages postés
40
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
25 août 2009

Yes alors je note :
-array_walk() récursif
-register global à modifier

Par contre coucou747 je ne comprends pas ta remarque.

Pour ce qui est de l'utilisation du code, simplement. Tout le monde à débuter en php et tout le monde a codé (avec du code pourris) des applications web qui tournent encore, donc ce genre de fichier permettent de "protéger" ces applications sans tout avoir à re-coder.
Merci des commentaires.
TheWeasel47
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Ceci dit dit c'est juste : le code est mal pensé décidément. A revoir.
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Il suffit de troquer array_walk pour array_walk_recursive.
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.