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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 6 déc. 2005 à 18:03
FoxLeRenard Messages postés 47 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 10 avril 2024 - 6 mai 2009 à 09:44
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34938-fonction-de-securite-contre-la-pollution-des-variables-et-le-hijacking

FoxLeRenard Messages postés 47 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 10 avril 2024
6 mai 2009 à 09:44
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
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
6 mai 2009 à 09:36
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°
FoxLeRenard Messages postés 47 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 10 avril 2024
6 mai 2009 à 08:45
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 !
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
6 mai 2009 à 08:11
? 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°
FoxLeRenard Messages postés 47 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 10 avril 2024
6 mai 2009 à 06:26
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 ?
kerneltony95 Messages postés 152 Date d'inscription dimanche 22 janvier 2006 Statut Membre Dernière intervention 26 mars 2007
9 oct. 2006 à 14:29
moi j'aime bien l' idée ca peut tjr servir ce type de code je te met une bonne note ^^
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 janv. 2006 à 02:52
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°
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 déc. 2005 à 10:29
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 !
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
24 déc. 2005 à 04:01
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°
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 déc. 2005 à 21:16
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);");
}
}
}
?>
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
23 déc. 2005 à 17:35
Oui c'est pas mal comme ça... .. .

Pourquoi dis tu...

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

???

@ tchaOo°
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 déc. 2005 à 15:01
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);");
}
}
}
?>
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
23 déc. 2005 à 14:58
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
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
23 déc. 2005 à 00:23
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°
The_Template Messages postés 16 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 19 décembre 2005
22 déc. 2005 à 23:28
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.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
22 déc. 2005 à 18:36
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°
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
21 déc. 2005 à 21:46
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});");
}
}
}
?>
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 déc. 2005 à 21:27
@ 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°
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
21 déc. 2005 à 19:56
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+
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 déc. 2005 à 12:58
-_-' et ça part en sucette ( . . ) .....

^_^
The_Template Messages postés 16 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 19 décembre 2005
20 déc. 2005 à 12:31
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.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
20 déc. 2005 à 11:39
" oO lol " ça veut dire ironique ?? bon, je note oO lol
The_Template Messages postés 16 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 19 décembre 2005
20 déc. 2005 à 11:06
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)
@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
19 déc. 2005 à 20:32
@ The_Template... et php ça sert à quoi ? oÔ LOol ;o)

@ tchaOo°
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
19 déc. 2005 à 20:05
The_Template, ça sert à avoir moins de bugs, moins d'erreurs de codages... un code plus propre, moins de failles de sécuritées...
The_Template Messages postés 16 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 19 décembre 2005
19 déc. 2005 à 19:53
Et register global à off ca sert à quoi ? oO lol
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
13 déc. 2005 à 10:11
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°
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 déc. 2005 à 10:02
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.
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
13 déc. 2005 à 09:43
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...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 déc. 2005 à 09:29
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.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
13 déc. 2005 à 02:33
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... .. .
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
12 déc. 2005 à 20:53
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...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 déc. 2005 à 20:38
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...
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
12 déc. 2005 à 20:10
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 ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 déc. 2005 à 19:28
"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...
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
12 déc. 2005 à 12:32
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+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
8 déc. 2005 à 13:55
@ 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°
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 déc. 2005 à 14:50
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.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
7 déc. 2005 à 13:04
C'est clair ...
register_globals = 'Off'

Et on en parle plus :o
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
7 déc. 2005 à 09:25
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 :/
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
6 déc. 2005 à 18:12
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°
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 déc. 2005 à 18:03
// c'est a dire toutes les variables qui ne sont pas censé passer par l'url

et pourtant, t'as _GET dedans...