begin process at 2012 05 27 18:29:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > SECURITÉ PROTECTION AUTOMATIQUE CONTRE MAGICQUOTE ET REGISTER_GLOBALS

SECURITÉ PROTECTION AUTOMATIQUE CONTRE MAGICQUOTE ET REGISTER_GLOBALS


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Classé sous :sécurité, Magic quote, Register global, pirate, hacker Niveau :Débutant Date de création :28/03/2008 Date de mise à jour :30/03/2008 12:56:27 Vu :5 891

Auteur : TheWeasel47

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note


 Description

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

  • <?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');
  • }
  • }
  • ?>
<?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.


 Historique

28 mars 2008 14:57:00 :
28/03/2006 -- Optimisation
28 mars 2008 14:57:44 :
28/03/2008 -- OPtimisation
28 mars 2008 15:06:25 :
Correction d'un petit bug
30 mars 2008 12:44:47 :
Amélioration de la source (mions de bug)
30 mars 2008 12:56:27 :
Correction d'une faute d'orthographe

 Sources du même auteur

Source avec Zip EVALUER UNE EXPRESSION À PARTIR D'UNE CHAINE DE CARACTÈRE
COPIER UN REPERTOIRE OU DEPLACER UN REPERTOIRE
Source avec Zip [POO] - CLASSE D'ACCÈS BDD MULTI SGBD
Source avec Zip GEO-LOCALISATION (CONTINENT)
Source avec Zip DECOMPOSEUR DE PDF (EXTRACTION DES PAGES) -[PHP-5 ORIENTÉ OB...

 Sources de la même categorie

Source avec Zip Source avec une capture CAPTCHA AJAX ANTI-BOT par darkvador59
Source avec Zip Source avec une capture ACCÈS, ESPACE MEMBRE AVEC INSCRIPTION ET DÉSINSCRIPTION PAR ... par stephelle
Source avec Zip CRYPTAGE REVERSIBLE par Mokost
Source avec Zip Source avec une capture CREATION DE COMPTE AVEC CRYPTAGE ET ESPACE DE CONNEXION SEC... par bm1982
PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip VÉRIFICATION DE FORMULAIRE EN PHP par psonic13
SÉCURISATION DE FORMULAIRE par ultimacsplayer
GÉRER UN .HTPASSWD par coockiesch
ENLEVER DES BALISES HTML DANS UNE TEXTAREA par keket

Commentaires et avis

Commentaire de neigedhiver le 28/03/2008 13:37:55

Salut,

L'idée est bonne.

Cependant, au lieu d'utiliser des boucles while pas vraiment optimisées, tu devrais plutôt utiliser array_walk() : une fonction native, donc écrite en C, sera forcément plus performante que des boucles en PHP.
Et puis... au lieu d'une boucle pour supprimer toutes les clés de $GLOBALS, pourquoi ne pas, tout simplement redéfinir $GLOBALS ?
$GLOBALS = array();
Le résultat ne serait-il pas le même ?
D'un coup, je me demande : le résultat de la directive register_globals est surtout de créer des variables portant le nom des clés des tableaux $_GET, $_POST, $_COOKIE.
Je pense qu'il faut donc surtout détruire ces variables :

Par exemple, http://www.mondomaine.tld/index.php?argument=valeur&truc=bidule

Avec register_globals à on, PHP va automatiquement créer les deux variables :
- $argument dont la valeur est 'valeur'
- $truc dont la valeur est 'bidule'

Ce sont ces variables qu'il faut détruire avant l'exécution du script.

Le tableau $GLOBALS permet d'accéder aux variables définies dans le contexte global depuis un contexte protégé (fonction, classe, etc) : ce n'est pas là que réside le manque de sécurité...

Pour comparer la version, tu peux utiliser version_compare() qui sert à ça.

Commentaire de TheWeasel47 le 28/03/2008 14:46:27

OK merci beacoup!
Je note les modification et je corrige par contre je n'ai pas compris l'histoire du global?
Que dois je faire exactement?

Commentaire de codefalse le 28/03/2008 15:10:55 administrateur CS

De plus j'ajouterai que tu peux en profiter pour obliger un meilleur usage du code, par exemple supprimer $HTTP_COOKIE_VARS et les autres du même type, afin de forcer l'utilisateur à utiliser $_COOKIE, $_GET, etc

Apres pour pousser le vice, ce qui serait tip top, ce serait une fonction ou tu lui dit la valeur que tu veux, quel genre (get, post, cookie), quel type (int, bool, etc) et optionnellement uen valeur par défaut, genre :

tonurl.php?exemple1=salut

dans ton code :

$mavar = getVar ('get', 'exemple1', 'string', 'valeurvide');
// Comme ca $mavar aura "salut" si salut existe et est un bien un string. et parsé s'il le faut
Tu peux aussi pousser encore plus en proposant des expreg à la place du typage, etc

Mais bon ca obligerai à modifier tout un code qui existe déjà !

Commentaire de neigedhiver le 28/03/2008 15:28:54

Re,

@codefalse : ce que tu lui proposes c'est plus que la sécurité dans le cas de register_globals à on... C'est pas vraiment le but de sa source, il me semble.
Non pas que l'idée soit mauvaise, juste que c'est, à mon sens, complètement différent...

Sinon, pour globals...

Quand register_globals est à on, PHP crée des variables portant le nom des index des tableaux superglobaux, comme je te l'ai expliqué plus haut. Il le fait en respectant un ordre précis (fixé par la directive variables_order : http://fr.php.net/manual/fr/ini.core.php#ini.variables-order )

Le tableau $GLOBALS ne représente pas une faille de sécurité, s'il est correctement utilisé, contrairement à register_globals à on, qui nécessite tout un tas de précautions particulières et qui n'est pas vraiment compatible avec la permissivité de php quant aux déclarations de variables.

En gros, inutile de vider le tableau $GLOBALS : mieux vaut supprimer les variables enregistrées par register_globals. Au lieu de :
unset($GLOBALS[$valeur]);

contente toi de :
unset($valeur);

$GLOBALS contient une référence à chaque variable définie dans le contexte global (en dehors d'une fonction ou d'une classe). Là, tu es dans le contexte global, lors de l'exécution de ton script (un fichier inclus reste dans le même contexte que la ligne qui l'inclut) : autant supprimer la variable, tout simplement.

Commentaire de malalam le 28/03/2008 19:05:57 administrateur CS

Hello,

la "protection" contre register_globals à on ne sert strictement à rien, là.
$_GLOBALS et register_globals n'ont aucun rapport.
Avec ce code, si register_globals est à on, et que j'ai une variable $_GET['toto'], si je fais echo $toto, cela marchera très bien. Ce qui ne marchera plus, c'est de faire echo $_GLOBALS['toto'].

De plus, une protection contre cette configuration de php.ini est inutile. Pourquoi ? Parce que ce n'est pas la configuration en elle-même qui va vraiment poser problème, c'est d'utiliser ses possibilités dans les codes.
Si on a register_globals à on, et que l'on utilise les bons tableaux $_POST, $_GET etc...on n'aura aucun soucis. Si tant est que l'on ait pris la bonne habitude de ne jamais utiliser à la fois $_GET['toto'] et une variable "normale" s'appelant aussi $toto. Cela permet de se prémunir contre toute attaque XSS ciblant les requêtes GET ou POST, quelle que soit la configuration de php.
Bref, dans tous les cas, le problème viendra du code, pas de la configuration.

Quant à get_magic_quotes_gpc(), le code existe depuis très longtemps sur ce site, en fait. Et ça tient plus du snippet (donc de codyx.org) que du code source, à mon avis. Et puis il y a des oublis dans le conception de ton code : $HTTP_POST_VARS, $HTTP_GET_VARS...

Commentaire de coucou747 le 29/03/2008 11:35:52 administrateur CS

<input type="text" name="truc[]" />
<input type="text" name="truc[]" />

je doute que ca fonctionne pour ce genre de trucs...

Commentaire de malalam le 29/03/2008 11:43:05 administrateur CS

Il suffit de troquer array_walk pour array_walk_recursive.

Commentaire de malalam le 29/03/2008 16:02:27 administrateur CS

Ceci dit dit c'est juste : le code est mal pensé décidément. A revoir.

Commentaire de TheWeasel47 le 29/03/2008 20:09:59

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

Commentaire de coucou747 le 29/03/2008 20:22:12 administrateur CS

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 :
<input type="text" name="truc[]" />
<input type="text" name="truc[]" />

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

Commentaire de codefalse le 30/03/2008 14:02:35 administrateur CS

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Hacker Dehemos pour tester la sécurité [ par lymphis ] Bonjour, Voilà je fait un jeu en PHP, mais comme je suis que débutant je suis très peu doué dans tout ce qui es faille dans la programmation PHP. Do Probleme sécurité Apache AJAX [ par StiriX ] Bonsoir à tous et à toutes ! Au menu ce soir, un problème dû la sécurité sur mon serveur Apache. Afin d'éviter l'accès à quiconque de mes scripts, e problème de sécurité avec l'envoi d'emails en grands nombres [ par jfmenguy ] Bonjour. Un des sites que j'ai développé en php a fait l'objet d'une attaque : des pirates se sont introduits et ont envoyés une grande série d'emails Sécurité [ par webalexpb ] Bonjour , est ce que quelqu'un pourrait me faire un brief concernant la sécurité sur les sites internet , car j'en ai deux et j'avoue que quand on me Sécurité sur un document [ par venver ] Bonjour à tous, J'ai fait un script d'instant gagnant en php avec un décompteur et quand ce décompteur est à zero il affiche une formulaire de contac Sécurité où en est on ? [ par delfti ] bonjour, je continue le développement de mon site et j'arrive à un point crucial. la sécurité !!! bref, pour rappel, je fais un site d'annonces et je Recherche d'un mot dans le désordre. [ par woodish ] Bonjour, Je cherche à créer une page en PHP pour une recherche d'un mot dans un tableau ($mots) à partir quelques lettres dans le désordre posté dans problème de sécurité dans ma base de donnée [ par elkarimi ] internaute puisse accèder à ton fichier de config http://www.sit.com/application/configs/application.ini par exemple ne te semble pas problématique ?? Sessions et sécurité [ par inwebo ] Bonjour à tous, Ma question est très simple, que doit on faire pour sécuriser des variables contenues en session et pourquoi ? PS : Déjà lu [url=htt


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales