|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bonjour,
Sur mon mutualisé, register global est à on, je ne peux pas le modifier. J'ai donc bien lu que je dois initialiser mes variables. Par exemple si je reçois une variable $variable par l'url, je dois l'utiliser dans mon script sous la form $_GET['variable'] et surtout pas $variable. Déjà là j'ai pas bien compris en quoi le fait de l'utiliser de la première manière et pas de la seconde constitue une sécurité même si je sais que le but est d'éviter que le pirate ne se crée des variables à sa guise. Ensuite je voudrais savoir, si je dois faire htmlspecialchars(mysq_real_escape_string($_GET['variable'])) même si je n'utilise pas la variable dans une requête et qu'elle ne me sert que pour une condition if(). Merci pour vos explications sur ce point, c'est un peu obscur.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#2 | ||||
|
Membre éprouvé
![]() Inscription : février 2005 Messages : 401 ![]() |
Un court exemple vaut mieux qu'un long discours
Code :
Alors que si c'est spécifié que "login" vient de la session, tu évites ce genre d'injection : Code :
|
||||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 791 ![]() |
Salut,
pour le premier point, ca peut poser un problème si, par exemple, tu te sers d'une variable de session pour stocker des infos relatives à un utilisateur pour des pages protégées. Mettons que tu stockes son niveau de droits en session, il pourra modifier cette variable dans l'url, en faisant par exemple : site.com?droits=1 Pour le deuxième, à la base c'est pour protéger des injections SQL pour pas que l'utilisateur puisse modifier ta requête. Vu que l'utilisateur peut pas modifier ton code source PHP même en entrant n'importe quoi, je vois aucune raison d'utiliser escape_string() pour des tests sur des variables. |
|
|
00
|
|
|
#4 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bon vu comme ça j'ai l'impression de n'avoir pas fait de grosse boulette.
Prenons un exemple réel, je copie colle un bout de script que j'utilise : //si il y a eu un avertissement, on affiche le message. Code :
Ce que je pige pas c'est que si je fais ma condition avec $_POST['variable_du_formulaire'], le pirate peut pas me pirater en se créant une variable maison alors qu'il le peut si je fais juste $variable_du_formulaire. Pourquoi ? ça tiens pas à grand chose mais j'ai pas compris le détail subtil et nuancé qui se cache derrière tout ça.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#5 | |
|
Membre éprouvé
![]() Inscription : février 2005 Messages : 401 ![]() |
Citation:
Qu'est ce que tu ne comprends pas au juste ? A quel moment qqchose t'échappe ? |
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
ca depend si register global est actif ou pas.
EDIT : explication plus bas !!
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
00
|
|
|
#7 | |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bon ok, alors je reprend Sylvain71
Citation:
Et c'est pareil que ce soit $_GET[], $_POST[] ou $_SESSION[] ?
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
lis ca, si tu veux :
http://www.php.net/manual/fr/ini.cor...gister-globals en fait si register global est à ON, c'est un gros probleme pour la sécurité.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Ok, j'ai lu, et cette page aussi
http://www.php.net/manual/fr/security.globals.php C'est pas d'une clarté limpide mais ils sont clairs sur un point : toujours initialisé ses variables. Alors je vais poser la question qui tue : Je reçois via l'url la variable $url. Je l'utilise directement dans mon script sous la forme $_GET['url']. Idem pour les variables de session ou celles POST[] des formulaires. En faisant cela, sont-elles initialisée ? Ou dois-je faire un truc grotesque du genre, en haut de la page: $_GET['url']=$_GET['url']. Je voudrais pas me faire entuber à cause d'un détail de ce genre.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#10 | |||
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
bon j'ai dit une connerie, et faut bien que je réctifie tout ça, mais ca m'a foutu les boules ces failles de sécurité alors j'ai tout revérifié.
si register_global = 1 et que je rentre ?toto=LOL dans l'url, on a : Code :
Citation:
mais si on a register_global à 0, y a pas de probleme, et nos variables de sessions ou autre ne pourront pas être piratées.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|||
|
|
00
|
|
|
#11 | |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Et bien justement, quand tu dis :
Citation:
Si elles viennent de la session les utiliser dans le script en précisant: $_SESSION[bob] Si elles viennent du formulaire, indiquer : $_POST[bob] Si elles viennent de l'url, indiquer : $_GET[bob] si elles sont créées dans le script de toute façon on craint rien normalement. C'est cela qu'on appele "initialiser une variable" ? C'est simplement indiquer sa provenance ?
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
|
00
|
|
|
#12 | ||||
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
on va dire que register_global est à 1.
donc si tu utilises des variables pour la session, il faut bien mettre SESSION devant, et la meme chose pour POST et GET !! car et oui ca marche quand meme si c'est à 1, mais c'est pas du tout sécuritaire !! oki ?? bon apres cela, imagine ce code : Code :
bah la si y a rien dans le POST, $tata n'a rien dedans, mais si tu rajoutes dans l'url ?tata=LOL et ben $tata = LOL dans ta page. ce qui peut poser des problemes. apres si tu code propre avec initialisation ca donnerait : Code :
et comme le passage dans l'url arrive avant le début de ton script, les fausses valeurs dans l'url ne seront pas prises en comptes.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
||||
|
|
00
|
|
|
#13 | |||||
|
Membre confirmé
![]() Inscription : septembre 2004 Messages : 411 ![]() |
Bonjour tout le monde,
Je commence à comprendre les failles qu'il peut y avoir avec le register global à "on". Merci maxoo pour ton dernier exemple. Par contre, je ne comprend pas ce que veut dire Djakisback : Citation:
SESSION.php Code :
Code :
Ensuite je fais : www.monsite.com/SESSION2.php?droit=1 Ca me retourne la bonne valeur de SESSION['droit'] et non "OUCH !". Alors, pourquoi à plusieurs reprises, il a était dit que les variables $_SESSION sont plus sensibles en mode register global "on"? Dans quel cas ? Merci d'avance ++ ShinJava
__________________
Petit débutant deviendra grand... débutant |
|||||
|
|
00
|
|
|
#14 | ||
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Citation:
Citation:
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
||
|
|
00
|
|
|
#15 |
|
Membre confirmé
![]() Inscription : septembre 2004 Messages : 411 ![]() |
Ouf ca me rassure, j'avais pas lu la relecture.
En fait, j'ai suivi la discussion post par post et celui de Djakisback m'a beaucoup troublé, donc j'ai commencé à paniquer de mon côté. En tout cas merci pour les infos que tu as données et les 2 dernières démonstration qui expliquent bien la chose. Donc du coup, il n'y aucun souci au niveau des $_SESSION quand la variable register global est à "on". Me voilà rassuré Bonne soirée. ++ ShinJava
__________________
Petit débutant deviendra grand... débutant |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 791 ![]() |
Ah ou en effet je me suis un peu égaré ^^
Mais ca dépend du param variables_order qui définit l'ordre d'écrasement des variables et vu que par défaut, les variables de session sont en dernier, même si t'as les registers à on, tu peux pas en écraser une par un GET ou POST. Désolé pour l'erreur |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com