begin process at 2012 05 27 21:22:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > FONCTION DE SÉCURITÉ CONTRE LA POLLUTION DES VARIABLES ET LE HIJACKING

FONCTION DE SÉCURITÉ CONTRE LA POLLUTION DES VARIABLES ET LE HIJACKING


 Information sur la source

Note :
5,8 / 10 - par 5 personnes
5,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & Cryptage Classé sous :hijacking, variables, sécurisation, sécurité, vérification Niveau :Débutant Date de création :06/12/2005 Date de mise à jour :12/04/2007 02:14:43 Vu :5 515

Auteur : kankrelune

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


 Description

Fonction pour lutter contre la pollution des variables vous appelez la fonction en tout début de page par exemple dans le header de votre site avant toute utilisation des super globales (get, server, env, post, cookie, etc)... cette fonction va tout simplement rechercher la présence de variable(s) interdite(s) dans les données soumises par l'internaute (get, post, cookie) et si elle en trouve elle met leur valeur à null... en parallèle un nettoyage de la super globale $GLOBALS est fait... c'est particulièrement utile pour ceux qui sont en register global à On et qui ont des mauvaises habitudes de codage (cela ne dispence bien entendu pas de prendre les bonnes habitudes)... ..

Source

  • /**
  • * Check superglobals for contamination and to prevent session hijacking
  • *
  • * @return void
  • **/
  • function checkSuperGlobals()
  • {
  • $vars_array = array(
  • 'GLOBALS',
  • '_SESSION',
  • '_GET',
  • '_POST',
  • '_COOKIE',
  • '_REQUEST',
  • '_SERVER',
  • '_ENV',
  • '_FILES',
  • );
  • $inputs = array_merge($_GET, $_POST,
  • $_COOKIE, $_SERVER,
  • $_ENV, $_FILES,
  • isset($_SESSION) ? (array)$_SESSION : array());
  • foreach($inputs as $k => $v)
  • {
  • if (isset($GLOBALS[$k]) && !in_array($k, $vars_array))
  • unset($GLOBALS[$k]);
  • elseif(in_array($k, $vars_array) && isset($_REQUEST[$k]))
  • {
  • $_REQUEST[$k] = null;
  • if(isset($_GET[$k]))
  • $_GET[$k] = null;
  • if(isset($_POST[$k]))
  • $_POST[$k] = null;
  • if(isset($_COOKIE[$k]))
  • $_COOKIE[$k] = null;
  • }
  • }
  • }
    /**
    * Check superglobals for contamination and to prevent session hijacking
    *
    * @return void
    **/
    function checkSuperGlobals() 
    {
        $vars_array = array(
                'GLOBALS',
                '_SESSION',
                '_GET',
                '_POST',
                '_COOKIE',
                '_REQUEST',
                '_SERVER',
                '_ENV',
                '_FILES',
                );
            
        $inputs = array_merge($_GET,    $_POST,
                                $_COOKIE, $_SERVER,
                                $_ENV,    $_FILES,
                                isset($_SESSION) ? (array)$_SESSION : array());
            
        foreach($inputs as $k => $v) 
        {
            if (isset($GLOBALS[$k]) && !in_array($k, $vars_array))
                unset($GLOBALS[$k]);
            elseif(in_array($k, $vars_array) && isset($_REQUEST[$k])) 
            {
                $_REQUEST[$k] = null;
               
                if(isset($_GET[$k]))
                    $_GET[$k] = null;
                if(isset($_POST[$k]))
                    $_POST[$k] = null;
                if(isset($_COOKIE[$k]))
                    $_COOKIE[$k] = null;
            }
        }
    }

 Conclusion


Il va de soit que ce n'est pas parce que vous utiliserez cette fonction que vous serez à l'abri de tout... .. .

En espérant que ça vous serve... .. .

@ tchaOo°


 Historique

06 décembre 2005 02:03:35 :
correction du commentaire... .. .
06 décembre 2005 05:48:19 :
pareil... .. .
13 décembre 2005 02:36:04 :
Modification suggérée par J_G... .. .
12 avril 2007 02:14:43 :
Fonction remise à ma sauce, ajout du nettoyage de $GLOBALS

 Sources du même auteur

HTTP_BUILD_QUERY() POUR PHP 4
Source avec Zip Source avec une capture CAPTCHA VISUELLE
Source avec Zip CAPTCHA NON VISUELLE

 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
Source avec Zip Source avec une capture PHPJSVFORM : DES CLASSES PHP, DES JAVASCRIPTS POUR CRÉER FAC... par synanceia
SÉCURISATION DE FORMULAIRE par ultimacsplayer
SÉCURISATION FORMULAIRE (SELECT ET OPTION) par fafa1510

Commentaires et avis

Commentaire de coucou747 le 06/12/2005 18:03:57 administrateur CS

// c'est a dire toutes les variables qui ne sont pas censé passer par l'url

et pourtant, t'as _GET dedans...

Commentaire de kankrelune le 06/12/2005 18:12:19

Et bien justement...

La boucle vérifie que des variables sensibles ne sont pas passées par $_GET pour tenter de les poluer ou de les détourner... .. .

imaginons que tu utilise une variable $monSiteConfig résultant d'une requete sql par exemple si la boucle trouve $_REQUEST['monSiteConfig'] c'est que l'on essaye de s'attaquer à cette variable via l'url... c'est aussi simple que ça... .. .

Après effectivement mettre $_GET dans la recherche est pas très utile... je n'y avais pas pensé... je ferais suivre... .. .

^_^

@ tchaOo°

Commentaire de Kirua le 07/12/2005 09:25:02

Je suis pas certain d'avoir compris ... il me semble que le tableau principal à vérifier c'est justement _GET, pourquoi l'enlever? Si j'ai une variable de session nommée $pseudo et que je fonctionne en globals on et que je passe $pseudo=ahahah par l'url, c'est une arnaque, il faut vérifier. Maintenant, l'ennui c'est que la présence de la variable dans les var de sessions va bloquer l'affaire, et ça c'est embêtant.

Je verrais bien qu'on lise les fichiers PHP exécutés pour établir la liste des variables qui y sont déclarées et en interdire le passage par une autre voie... mais le plus simple c'est quand même de mettre les auto globals à off, c'est pour ça que ça a été imaginé, parce que ça crée trop de problèmes :/

Commentaire de FhX le 07/12/2005 13:04:17

C'est clair ...
register_globals = 'Off'

Et on en parle plus :o

Commentaire de malalam le 07/12/2005 14:50:46 administrateur CS

Ouais, je laisse ce code, pour info, et vertus pédagogiques ;-)
La vertu pédagogique, c'est la moralité à appliquer à ce code (celle de =Fhx) :
Moralité :
"register_globals = 'Off'
Et on en parle plus :o"

Parce que je préfère que les débutants prennent cette habitude, plutôt que celle d'utiliser un tel code.
Maintenant, ça peut servir...dans le cas où l'on héberge un site chez un hébergeur vraiment très très pourri ;-)
Il n'empêche, on récupère ses $_GET toujours, et jamais dans le cadre d'un "extract" permanent, c'est la bonne méthode. ON teste l'existence des variables reçues avec isset, empty, is_numeric etc...tout ce qu'il faut pour la cadrer un maximum; on teste sa provenance avec $_GET, $_POST, $_COOKIE, $_SESSION etc... (et pas $_REQUEST...), on l'escape, on lui fait subir maints traitements afin de la sécuriser au maximum avant de daigner la réinjecter dans la suite du traitement!
Voilà la bonne façon de procéder.
Et ce code montre pourquoi.

Commentaire de kankrelune le 08/12/2005 13:55:15

@ Kirua => Ce n'est pas dans la variable $_GET que la recherche est faite mais dans la superglobale $_REQUEST qui est un tableau associatif constitué du contenu des variables $_GET, $_POST, $_COOKIE je pense que je ne t'apprend rien... .. . ;o)

@ FhX => oui sauf que tous les hébergeurs n'ont pas register global à off... malheureusement... loin de là... .. .

@ Malalam => bien entendu qu'il vaut mieux prendre dès le début les bonnes habitudes de codage... c'est d'ailleurs ce que je dis dans la présentation il me semble... cependant ce n'est pas le cas de tout le monde et quand register global est à on on peut ouvrir des failles grosses comme des maisons avec pas grand chose... .. .

Ce code à déja fait ses preuves contre des attaques par pollution des variables et surtout contre des tentatives de hijacking... après biensur le top c'est register global à off mais dans le cas d'un CMS comme xoops il faut prévoir tous les cas de figure... et pour ceux qui sont hébergés avec register global à on je pense que ce code ne sera pas inutile (et c'est pas pour les ressources qu'il prend lOol)... .. . ;o)

@ tchaOo°

Commentaire de J_G le 12/12/2005 12:32:53

Moi j'aime !

Bon effectivement, ce script est destiné à ceux et celles qui ont register global à On, qui ne vérifient pas la provenance de leur variables et qui en plus ne les initialises pas...

Bref, ce script est destiné au non-informaticien ;)
Donc il a le mérite de leur montrer qu'un script PHP peut-être "piraté".


Par contre, au lieu de rediriger vers la page d'index... ou même de tester l'existance de ces variables... Moi je les initialiserais de force.


#  foreach ($vars_array as $bad_global)
#                 $_REQUEST[$bad_global] = NULL;


Comme ça, le pirate ne sais même pas si il est en train de toucher un point sensible. Et la navigation du site ne sera pas affectée par la fonction.


A+

Commentaire de coucou747 le 12/12/2005 19:28:42 administrateur CS

"Bref, ce script est destiné au non-informaticien ;)"=> ici, je ne suis pas sur que la majorité des membres soient informaticiens (vu le niveau des sources postés, je dirais que malam, sjon, Antho et quelques autres pourraient l'être, mais Antho ne l'est pas...)
c'est une question de passion, de vocation, ou du gout des choses qui marchent... pas une question de proffession...

Commentaire de J_G le 12/12/2005 20:10:16

Effectivement, ce site est à la base du PHP.

De même, on est d'accord sur ce point : l'informatique est avant tout une question "de passion, de vocation, ou du gout des choses qui marchent".



Mais je ne sais pas si tu regardes les scripts postés sur php.net, il sont rarement plus compliqués que ceux postés ici.

En voici un qui correspond à cette source :
------------------------
If you're on a shared environment, and have no way of disabling register_globals, this little "unregister_globals" snippet could come in handy:

<?php
if (@ini_get('register_globals'))
   foreach ($_REQUEST as $key => $value)
       unset($GLOBALS[$key]);
?>
------------------------------------

Bon, pas de quoi s'en relever la nuit non plus...

Alors je ne dénigre pas les sources postées ici. Je suis informaticien (de profession et de gout des choses qui marchent, mais pas de vocation ni de passion), ingénieur, ... Et même si je n'utilise plus les sources de PHPCS depuis de belles lurettes, je trouve que beaucoup ont leur mot à dire dans la "communauté" PHP.
Et, toujours à mon gout, beaucoup d'informaticiens en herbe font leurs débuts sur ce site. Véritable tremplin vers une connaissance accrue de PHP.

Après, c'est vrai, tout n'est pas rose! Combien de fois la même question ? Combien ne comprennent pas que PHP est coté serveur et ne vois pas pourquoi c'est ainsi... Beaucoup de posts émanent de gens qui n'ont aucune culture de l'outil informatique (et souhaitent juste se faire une page perso pour mettre des photo en ligne : "Pourquoi ça revient pas à la ligne ?"). Mais justement, ils s'y intéressent. Alors autan leur donner des cefs pour mieux comprendre.

Bon, je délire un peu là... Mais tu m'excuseras. Hein ?

Commentaire de coucou747 le 12/12/2005 20:38:05 administrateur CS

sur php.net, les "sources" sont au même niveau que les hello worlds, elles sont faites pour aider les gens  comprendre une fonction et non pour être utilisées tel qu'elles...

Commentaire de J_G le 12/12/2005 20:53:10

Ben, ch'ais pas, mais y'a un paquet de sources qui dépassent les 100 lignes... Et franchement beaucoup sont très utiles (utilisables) telles quelles.

Mais je parle des sources postées par les utilisateurs et non celles qui illustrent les fonctions...

Commentaire de kankrelune le 13/12/2005 02:33:52

Petite précision... cette source n'a jamais eu la prétention de révolutioner le php... ni la sécurité des scripts... hein... c'est pour ça que je l'ais mis au niveau débutant... je dis ça parce que je sent des déçu dans l'assistance... lOol... .. . ;o)

Sinon voila je pense que cette source peut autant être pédagogique qu'utile... nombreux sont les hébergeurs qui tournent encore avec register global à on... après faut pas non plus se croire à l'abri de tout en mettant cette fonction... on ne le répètera jamais assez... .. . ;o)

Je sais pas qui à mis 10 mais c'est trop... n'exagérons rien... mais c'est gentil quand même... .. .

^_^

@ tchaOo°

ps : je prend en compte ton idée J_G et modifis la source en concéquence... .. .

Commentaire de malalam le 13/12/2005 09:29:19 administrateur CS

Sur ça, je suis de l'avis de J_G. Je suis aussi, en effet Coucou, informaticien de métier (ingénieur de développement web). Y a des sources qui sont d'un bon niveau ici. Pas toujours, certes...mais y en a. J'essaye de faire un peu de ménage, mais bon...il y a des sources parfois très simples, vues et revues, mais bien codées, et qui peuvent montrer de bonnes habitudes de programmation, de jolis exemples aux débutants.
Après, des sources vraiment utiles, y en a, mais moins. Le problème c'est que CS est TRES visité, et il est difficile de le cantonner à un site de sources vraiment pro. D'ailleurs, aucun site à ma connaissance n'a que des sources de très grandes qualités (genre, que des phpmyadmin, par exemple).
Quant aux sources php.net, enfin plutôt les petits scripts, ils sont souvent très bons, mais il ne faut pas se leurrer : sur php.net il y a pas mal de "gourous"...la moyenne d'âge n'est pas la même, les compétences non plus. Bref, ce n'est pas la même cible, ni le même domaine d'application.

Commentaire de J_G le 13/12/2005 09:43:29

Salut malalam...

<<
D'ailleurs, aucun site à ma connaissance n'a que des sources de très grandes qualités (genre, que des phpmyadmin, par exemple).
>>
=> sourceforge.net (?) C'est de là-bas que sort phpMyAdmin.

<<
sur php.net il y a pas mal de "gourous"
>>
C'est à dire qu'avant d'être affiché, un post doit être validé par les administrateurs du site (qui ne doivent pas être très-très loin des concepteurs de PHP). Seuls ceux ajoutant qqes choses de réél resteront. Ce n'est pas tout à fait la même politique que sur PHPCS.

kankrelune, j'ai équilibré ta source...

Commentaire de malalam le 13/12/2005 10:02:30 administrateur CS

Hello J_G :-)

Ouyais, SourceForge, c'est vrai, mais ce n'est pas à proprement parlé un repository de sources; pour moi, c'est un repository de projets.
Puisque t'es ingé, tu sais qu'il est très différent de bosser sur...le code d'une classe bdd, que de bosser sur un applicatif web dédié à la gestion complète d'un réseau de transport (par exemple). Dans le premier cas, on bosse sur une source, éventuellement un petit ensemble de classes, et la démarche ne sera pas tout à fait la même que dans le second cas, où on bosse sur ujn vrai projet, avec de multiples imbrications, orienté vers un domaine d'application plus ou moins précis. Ca ne se gère pas de la même manière. SourceForge présente plutôt de vrais bon gros projets bien lourds :-)

Je ne savais pas qu'il y avait validation sur php.net tien. Mais ça ne m'étonne guère :-) Je n'ai jamais contribué là-dessus; tout au plus à la liste de distribution dév php, de temps à autres.

Commentaire de kankrelune le 13/12/2005 10:11:04

Hello... .. .

Effectivement Sourceforge propose plus de sources abouties qu'ici mais la différence s'arrête là... l'interet d'un site comme phpcs est, à mon avis, le caractère éducatif de son contenu... alors cela peut être rasoir pour les pro, habitués et autres amateurs éclairés du php de voir autant de bout de code non fini ou baclés (bien qu'il y ai un paquet de très bonne sources sur le site) mais il ne faut pas sous estimer l'impact d'un tel site... phpcs regorge de bonne idées et de trucs qui ne sont pas forcement accessible via des site plus ""pro""... et c'est, encore à mon avis, ce qui fait à la fois sa force et son point faible... .. .

On aprend d'autant plus dans un environement abordable bien que des erreurs puissent se glisser de ci de là alors que, généralement, on avance plus lentement au milieux de ""pro"" bien que cela se fasse plus proprement c'est un fait... ça ne s'applique pas qu'à l'informatique ou au codage mais le net fragmente pas mal la transmition du savoir par niveau rendant ce déroulement éducatif d'autant plus vrai... tout du moins c'est le constat que j'en ai fait à force... .. .

En attendant moi... en tant qu'amateur semi éclairé... qui pige pas grand chose à la langue de shakespear... j'aime bien... .. . ;o)

@ J_G... qu'entend tu par équilibré ma source... elle penchait... lOol... .. ?

^_^

@ tchaOo°

Commentaire de The_Template le 19/12/2005 19:53:57

Et register global à off ca sert à quoi ? oO lol

Commentaire de coucou747 le 19/12/2005 20:05:16 administrateur CS

The_Template, ça sert à avoir moins de bugs, moins d'erreurs de codages... un code plus propre, moins de failles de sécuritées...

Commentaire de kankrelune le 19/12/2005 20:32:58

@ The_Template... et php ça sert à quoi ? oÔ LOol ;o)

@ tchaOo°

Commentaire de The_Template le 20/12/2005 11:06:27

Je sais pas si vous aviez compris, mais mon message était IRONIQUE.

Je voulais dire qu'il fallait vraiment être fou pour coder avec un register globan à ON. D'où l'inutilité de ce genre de source. Outre la sécurité qui est complétement miuse de côté, un register global à ON pourrit vraiment le code, on ne s'y retrouve plus entre les variables qui sont fournies par l'utilisateur et les autres.
Ce n'est pas pour rien que php a décidé de mettre les register global à off par défaut.
J'espère que mes post seront mieux compris la prochaine foi (lol, il était pas très clair non plus)
@+

Commentaire de coucou747 le 20/12/2005 11:39:56 administrateur CS

" oO lol " ça veut dire ironique ?? bon, je note oO lol

Commentaire de The_Template le 20/12/2005 12:31:35

Et ca c'était ironique ?
Je saisis plus là. C'est drôle quand même que deux types me tombent gentillement dessus parce que j'ai marqué "oO lol", destiné à montrer tout mon étonement à voir que des gens n'ont pas encore compris qu'il fallait mettre register global à off.
Bon ok je mettrais plus "oO lol".
lol.

Commentaire de Kirua le 20/12/2005 12:58:21

-_-' et ça part en sucette ( . . ) .....

^_^

Commentaire de J_G le 21/12/2005 19:56:09

Ouai... J'aime bien môa qu'en ça part en vrille...

Reste cool the_template, je pense (j'espère) que tout le monde avait compris l'ironie de ton premier message (ou ben alors y'a pis des boeufs ! J'vous l'jure, c'est-y pas croyable...).

Alors ne change rien & A+

Commentaire de kankrelune le 21/12/2005 21:27:49

@ the_template... bah si "oO lol" c'est ironique... "oÔ LOol ;o)" c'est quoi... parce que si tu relis bien mon message... .. . ;o)

"Je voulais dire qu'il fallait vraiment être fou pour coder avec un register globan à ON. D'où l'inutilité de ce genre de source."

Il serait bien que tu relise un peu les commentaires de cette source... que le fait de coder avec register_global tienne de la folie est un fait mais il n'en reste pas moins que certains le font quand même donc c'est bien de traiter ces gens là de fou mais proposer des moyens de rendre les scripts en cause moins passoire c'est mieu ne crois tu pas... qui plus est et là je commence vraiment à avoir la sensation de me répéter je vais donc le dire haut et fort (lOol)... .. .

QUE TU LE VEUILLE OU NON? QUE TU TROUVE CA DINGUE OU PAS IL Y A ENCORE DES HEBERGEURS QUI ONT REGISTER GLOBAL A ON !!! ET PAS QU'UN PEU... .. .

Voila donc avoir un avis sur la chose c'est bien mais ça ne change pas grand chose sur les fait... moi je trouve totalement con que l'on puisse s'entre tuer pour des raisons ethnique ou religieuse et pourtant ça n'empeche pas qu'il y a des guerres de par le monde... tu me suis the_template... .. .

Voili voilou... .. .

@ tchaOo°

Commentaire de J_G le 21/12/2005 21:46:19

La religion ? ethnique ta mère !


Après, moi je dis rien... Mais je pourrais dire autre chose : ini_set(register_globals,'0');
(en haut de chaque script)












<?php
// Effectively turn off dangerous register_globals without having to edit php.ini
if (ini_get(register_globals))  // If register_globals is enabled
{ // Unset $_GET keys
  foreach ($_GET as $get_key => $get_value) {
   if (ereg('^([a-zA-Z]|_){1}([a-zA-Z0-9]|_)*$', $get_key)) {
     eval("unset(\${$get_key});");
   }
  } // Unset $_POST keys
  foreach ($_POST as $post_key => $post_value) {
   if (ereg('^([a-zA-Z]|_){1}([a-zA-Z0-9]|_)*$', $post_key)) {
     eval("unset(\${$post_key});");
   }
  } // Unset $_REQUEST keys
  foreach ($_REQUEST as $request_key => $request_value) {
   if (ereg('^([a-zA-Z]|_){1}([a-zA-Z0-9]|_)*$', $request_key)) {
     eval("unset(\${$request_key});");
   }
  }
}
?>

Commentaire de kankrelune le 22/12/2005 18:36:23

Oui je te le concède J_G ma comparaison avec les problèmes de ce monde était un peu capilo tractée... en attendant ton code est sympa mais un peu restrictif à mon gout... lOol... .. .

Tiens c'est marant j'ais eu une drole d'entrée dans le logs de sécu d'un des sites qui utilise cette fonction...

Variable attempt : not alowed variable $GLOBALS by Visitor (64.60.106.154)
Variable attempt : not alowed variable $_REQUEST by Visitor (64.60.106.154)

On m'aurait menti... maintenant faudrait que je developpe l'écriture du log pour avoir plus d'infos (requete exacte)... .. .

@ tchaOo°

Commentaire de The_Template le 22/12/2005 23:28:43

Salut
C'est pas la peine d'en faire un plat non plus, mais je penses qu'essayer de s'accrocher à son register global, essayer de sécuriser cette option pour à tout prix la conserver au lieu de la mettre à off, est un vice.

Citation : la bible (www.php.net)
Lorsqu'elle est activée, register_globals va injecter (empoisonner) vos scripts avec toutes sortes de variables, comme les variables issues des formulaires HTML. Ceci, couplé au fait que PHP ne requiert pas d'initialisation de variable signifie que la programmation de script peu sûr est possible. Ce fut une décision difficile de la communauté PHP, mais finalement, il a été décidé de désactiver par défaut cette variable. Lorsqu'elle est active, le programmeur ne sait pas exactement d'où provient le contenu de la variable, et ne peut que faire des suppositions.

Commentaire de kankrelune le 23/12/2005 00:23:03

The_template je n'en fais pas un plat cependant tu n'as pas du lire mon avant dernier commentaire (la phrase en majuscule)... je vais te la remettre ça t'évitera de chercher... .. . ;o)

"QUE TU LE VEUILLE OU NON? QUE TU TROUVE CA DINGUE OU PAS IL Y A ENCORE DES HEBERGEURS QUI ONT REGISTER GLOBAL A ON !!! ET PAS QU'UN PEU... .. ."

@ tchaOo°

Commentaire de J_G le 23/12/2005 14:58:11

kankrelune (et les autres d'alleirs, faut pas être sectaire !) =>

Le code tout moche avec les ereg et patati... effectivement, il est tout moche et bien débile !!! Je l'ai copié coller depuis le site fr.php.net (la fameuse Sainte Ecriture).
Le c** qui à écrit ça efface les variables get, puis post et enfin request !?! Euh.. non ! request reprend les post et les get....

Donc, je ne suis pas étonné que tu te fasse virer à l'execution.

En voici une version un peu mieux :
(preg et plus efficace que ereg)
(eval est inutile dans ce cas puisqu'il existe les variables-de-variables)

<?php
// Effectively turn off dangerous register_globals without having to edit php.ini
if (ini_get(register_globals))  // If register_globals is enabled
{ // Unset $_REQUEST keys
  foreach ($_REQUEST as $request_key => $request_value) {
   if (preg_match('@^\w{1}[\w\d]*$@', $request_key {
     unset($$request_key);");
   }
  }
}
?>


On apprchoe de quelque chose de pas mal là !
Non ?

Biz et Noyeux Joël à tous

Commentaire de J_G le 23/12/2005 15:01:37

Voir même :

<?php
// Effectively turn off dangerous register_globals without having to edit php.ini
if (ini_get(register_globals))  // If register_globals is enabled
{ // Unset $_REQUEST keys
  foreach ($_REQUEST as $request_key => $request_value) {
   if (preg_match('@^\w{1}[\w\d]*$@', $request_key) and isset($$request_key) ) {
     unset($$request_key);");
   }
  }
}
?>

Commentaire de kankrelune le 23/12/2005 17:35:32

Oui c'est pas mal comme ça... .. .

Pourquoi dis tu...

"Donc, je ne suis pas étonné que tu te fasse virer à l'execution."

???

@ tchaOo°

Commentaire de J_G le 23/12/2005 21:16:02

J'ai dis que tu te faisais virer pour ça :

Variable attempt : not alowed variable $GLOBALS by Visitor (64.60.106.154)
Variable attempt : not alowed variable $_REQUEST by Visitor (64.60.106.154)


Ce ne sont pas le genre de truc marrant à lire...


PS : J'ai oublié les '_' dans le petit script, que revoici !
<?php
if( ini_get(register_globals) ) {
    foreach ($_REQUEST as $request_key => $request_value) {
        if( preg_match('@^[\w_]{1}[\w\d_]*$@', $request_key)
                and isset($$request_key) ) {
            unset($$request_key);");
        }
    }
}
?>

Commentaire de kankrelune le 24/12/2005 04:01:44

Aaaaah... mais non c'est pas moi qui me suis fais virer... c'est dans le log de sécurité d'un des sites que je gère... le script que je donne au début (avec les $bad_global) écrit dans un log quand il trouve une des $bad_global ou dès qu'une mauvaise action vérifié par la class est tentée... et quel ne fut pas ma suprise quand j'ais lu le log l'autre jour... .. .

Qui plus est un whois de l'ip pointe vers les states donc c'est surement pas moi qui es fais ça par erreur... ça confirme juste l'utilité de ce petit bout de code... .. . ;o)

@ tchaOo°

Commentaire de FhX le 26/12/2005 10:29:01

Oui, tant que l'hebergeur garde register_globals à ON bien entendu.

Sait on jamais, on tombe sur tout et n'importe quoi, ca peut toujours aider dans ce cas la !

Commentaire de kankrelune le 14/01/2006 02:52:36

Petit rajout... suite à des recherches il semblerait que ce code serve aussi à combler une faille d'anciennes versions de php du à un bug au niveau de l'écriture des variables globales... y a pas mal de scripts qui utilisent une version plus ou moins semblable de ce code... par exemple dans phpMyAdmin on peut trouver... .. .

if(isset($_REQUEST['GLOBALS']) || isset($_FILE['GLOBALS'])){
    die('Warning Global overwrite attempt');
}

comme quoi... .. . ;o)

@ tchaOo°

Commentaire de kerneltony95 le 09/10/2006 14:29:07

moi j'aime bien l' idée ca peut tjr servir ce type de code je te met une bonne note ^^

Commentaire de FoxLeRenard le 06/05/2009 06:26:22

Hum ... ça va hurler mais j'oses ...
avec google on peut atteindre nos sites par nimporte quel PHP alors comment utiliser cette fonction juste a l'arrivée d'un visiteur,

En fait j'irais même bien plus loin, si j'ais passé cette bariére, j'ouvre
un autre onglet sur la même page je serais vu dans la même session non ?

Commentaire de kankrelune le 06/05/2009 08:11:03

? j'ai pas compris là... tu es sûr d'être sur la bonne source ? si c'est le cas si tu pouvais préciser... .. .

@ tchaOo°

Commentaire de FoxLeRenard le 06/05/2009 08:45:26

Oui c' est bien ton code de sécurité que  tu dis de placer en tête, ça veut dire en tête de tout mes php ? et j'appelles la fonction de suite même avant d'avoir fait session_start(); ???

Au passage merci de m'avoir répondu si vite t' es génial !

Commentaire de kankrelune le 06/05/2009 09:36:30

Oui il faut executer ce code au début de toutes les pages concernées... après session_start() sinon la sg $_SESSION ne sera pas testée... .. .

Mais avant d'utiliser ce code vérifie ta version de php et surtout que register_globals est activé sinon ça ne sert à rien de l'utiliser... ça fait 4 ans que j'ai posté cette source php a évolué depuis... .. . ;o)

@ tchaoo°

Commentaire de FoxLeRenard le 06/05/2009 09:44:19

OK parfait et en tout cas merci,
Oui Oui bien sur je comprends la vitesse d'évolution ...
mais il reste encore bien des serveurs mal protégés !!!
A bientôt le plaisir de te croiser

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Formulaire et sécurité [ par ivanmac ] Bonjour, Depuis quelques temps un petit malin s'amuse avec le formulaire d'inscription à la newsletter d'un site dont je m'occupe. N'étant pas un exp fonction [ par henri12 ] &nbsp;bonjourvoila j essai de faire entrer 2 variables string&nbsp;dans une fonction&nbsp;la fonction de depart est&nbsp;&nbsp;function mail_existe($e variables globales [ par dark_naruto25 ] Bonjour les amis, &#231;a va paraitre un peu *** comme question,&nbsp; et puis j'ai du mal cherche sur le site. Mais j'ai un probl&#232;me avec une va remplir des variables en cliquant sur un bouton [ par cacoucatatonique ] je voudrais faire une fonction qui recupere une valeur dans une base de donn&#233;e la comparer &#224; une autre valeur qui va remplacer celle qui est Vérification de connection à une base de donnée [ par mgnet ] Bonjour je souhaiterai savoir comment savoir si un script est d&#233;j&#224; connect&#233; &#224; une base de donn&#233;e et si oui je ne me connecte Includes et variables. [ par Rimb0 ] Bonjour, je viens de faire un script php qui affiche une page en fonction des secondes : &lt;?php $date=date("s"); include('http:/monsite.com/reperto sécurité SSL [ par j_aub ] slt ttt le monde,dites moi coment je peu securis&#233; mon application en utilisant SSL?en fait je travaill avec APACHE 1.3.33et PHP 4.4.0merci davanc resultats sur plusieurs pages [ par khelouiati ] J'envois via un formulaire une recherche sur une table, le r&#233;sulatat est trait&#233; sur une autre page en php, et ainsi j'ai le listing, le prob Chemin avec variables [ par Manubob ] Bonjour &#224; toutes et &#224; tous !J'aimerais savoir comment r&#233;diger un "chemin" &#224; l'aide de variables.j'ai essayer &#231;a mais &#231;a Probléme de récuperation de variables [ par khafis ] &nbsp; Je viens de commencer avec PHP, je travaille avec deux pages: La premiere comporte des zones de textes et un bouton "SUIVANT" qui me permet de


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,437 sec (4)

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