Les magic quotes : bien/pabien ?

Les magic quotes : bien/pabien ? - PHP - Programmation

Marsh Posté le 22-01-2004 à 13:10:42    

Vala, c'est une question que je me pose depuis un pitit bout de temps et ch'uis tombé sur cet article tout à l'heure : http://www.webmasterstop.com/tutor [...] otes.shtml
Pour tous ceux qui ont fait un peu de PHP/MySQL avec ou sans submit de formulaire, vous avez très certainement été confrontés au problème. Du coup, vous avez fait quoi ? striplashes() et magic_quotes à on ou l'inverse ?
Perso, je fais magic_quotes à on, mais j'me pose de plus en plus la question de la pertinence de cette feature.
 
Des avis éclairés ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 22-01-2004 à 13:10:42   

Reply

Marsh Posté le 22-01-2004 à 14:16:18    

Putain, 20 vues et 2 votes, chu bien avancé [:ddr555] Parlez, bon dieu :fou:


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 22-01-2004 à 14:17:36    

honnetement j'en sais rien j'ai fait un peu de php dans ma jeunesse mais je me souvien pas de l'option magic quotes, je me souvien que desfois j'utilisai stripslashes mais je me souvien plus du contexte

Reply

Marsh Posté le 22-01-2004 à 14:24:54    

Ba en général, on utilise stripslashes pour virer les sales \ qui auraient pu être rajoutés par les magic_quotes, justement [:ddr555] 'fin moi j'l'ai jamais utilisé autrement :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 22-01-2004 à 14:28:19    

magic quote ON pour moi... jamais eu de problemes  [:spamafote]  
et aussi stripslashes si besoin...
le mec qui a ecrit l'article a l'air un peu cinglé :o

Citation :


Magic Quotes are Evil!
 
While you sleep, they whisper in your dreams -
 
\'Use magic quotes. You know you want to. Go on. It\\'s just so easy\\\'.
 
Do not succumb!. They may seem like a good idea to start with, saving you from extra work, but one day you will regret it. If you have to move host for example, or give your code to someone less capable than yourself, you will pay the price!  


Message édité par uriel le 22-01-2004 à 14:29:01

---------------
IVG en france
Reply

Marsh Posté le 22-01-2004 à 14:29:37    

Taiche a écrit :

Ba en général, on utilise stripslashes pour virer les sales \ qui auraient pu être rajoutés par les magic_quotes, justement [:ddr555] 'fin moi j'l'ai jamais utilisé autrement :o

en gros c quoi les magic quotes ? ca rajoute des \ ou il faut pr mettre des cotes dans une chaine de caractères ?

Reply

Marsh Posté le 22-01-2004 à 14:32:36    

Bin ui ; ça rajoute \ pour les ', \ et NUL. Perso ça m'a toujours gavé de faire des stripslashes donc autant savoir ce qui est bien ou pas :o
 
Uriel : :jap: C'est vrai que le gars bon bin il a l'air un brin intégriste m'enfin il a p'têt 2-3 points pas trop cons [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 22-01-2004 à 14:34:35    

les magic_quotes sapu, ça ne sécurise rien du tout car suivant où on envoie la chaine, la notion de protéger n'est pas la même.
La bonne méthode c'est d'arrêter le délire sur les concaténations de chaines. Avoir par exemple des fonction SQL de bindng des arguments d'un where (et des statements préparés au passage), avoir le même type de chose pour les lignes de commande, etc.
 
ça donnera du code plus propre, plus sûr et plus rapide.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 22-01-2004 à 14:43:08    

nraynaud a écrit :


ça donnera du code plus propre, plus sûr et plus rapide.


 
là suis d'accord, moi c'etait pour un usage personnel alors j'ai fais la faignasse :/


---------------
IVG en france
Reply

Marsh Posté le 22-01-2004 à 14:43:37    

nraynaud a écrit :

les magic_quotes sapu, ça ne sécurise rien du tout car suivant où on envoie la chaine, la notion de protéger n'est pas la même.
La bonne méthode c'est d'arrêter le délire sur les concaténations de chaines. Avoir par exemple des fonction SQL de bindng des arguments d'un where (et des statements préparés au passage), avoir le même type de chose pour les lignes de commande, etc.
 
ça donnera du code plus propre, plus sûr et plus rapide.


+1

Reply

Marsh Posté le 22-01-2004 à 14:43:37   

Reply

Marsh Posté le 22-01-2004 à 14:46:27    

magic quotes suxxent mais sur les mutu, sont souvent On pour des raisons de sécurité.... et il n'est pas toujours possible de les virer. sauf par le biais de fonction fait maison .....
 
personnellement j'ai décidé de prendre l'habitude de coder avec magic_quotes 1 et d'effectuer mes traitements en conséquence.


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 22-01-2004 à 14:55:34    

sapuduku et php c'est de la merde parceque c'est à on par défaut maintenant

Reply

Marsh Posté le 22-01-2004 à 14:57:46    

MagicBuzz a écrit :

sapuduku et php c'est de la merde parceque c'est à on par défaut maintenant


 
[:kiki]


---------------
IVG en france
Reply

Marsh Posté le 22-01-2004 à 15:00:41    

Merci à tous pour ces retours :jap:
Quant aux trolleurs, ils peuvent aller se faire mettre foutre plaisir à troller ailleurs :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 22-01-2004 à 15:00:59    

MagicBuzz a écrit :

sapuduku et php c'est de la merde parceque c'est à on par défaut maintenant


 
Hein ? :o


---------------
GENERATION MOBILES : Imprimantes GSM & logos/sonneries/jeux
Reply

Marsh Posté le 22-01-2004 à 15:06:10    

je troll pas. magicquote qui est une merde infâme (d'où il se permet de modifier les variables sans rien dire, en utilisant en plus un truc qui n'est pas compatible avec la plupart des SGBD, et cnie ?)
 
et ces gros crétins qui décident des paramètres par défaut de PHP ont eu la merveilleuse idée de mettre cette daube à on par défaut.
 
c'est de la merde et c'est des gros tocards, et je vois pas en quoi c'est troller que de dire une vérité. putain, le libre et le gnu ça peut être que bien et génial ? c'est quoi c'te règle piniouf là ?


Message édité par MagicBuzz le 22-01-2004 à 15:07:18
Reply

Marsh Posté le 22-01-2004 à 15:10:39    

MagicBuzz a écrit :


c'est de la merde et c'est des gros tocards, et je vois pas en quoi c'est troller que de dire une vérité. putain, le libre et le gnu ça peut être que bien et génial ? c'est quoi c'te règle piniouf là ?


 
bordel, mais tu te dis jamais 'c'est bizarre souvent sur les topics ou je passe, ça part en vrille à cause de ce que je dis?'  [:uriel]  
 
Oui, c'est une erreur de leur part et c'est condamnable, mais ça n'a rien à voir avec 'php c'est de la merde' :o  


---------------
IVG en france
Reply

Marsh Posté le 22-01-2004 à 15:12:11    

s'd'la merde :p
 
z'avez qu'à pas me dire que vb s'd'la merde à longueur de journée. j'ai passée une mauvaise soirée hier, et ce soir je vais en passer une autre, faut que je décompresse, alors php z'ont pas droit à l'erreur c'est tout :p et pis vous avez qu'à être moins succeptible, le 2nd degré ça existe aussi


Message édité par MagicBuzz le 22-01-2004 à 15:12:55
Reply

Marsh Posté le 22-01-2004 à 15:12:34    

MagicBuzz a écrit :

je troll pas. magicquote qui est une merde infâme (d'où il se permet de modifier les variables sans rien dire, en utilisant en plus un truc qui n'est pas compatible avec la plupart des SGBD, et cnie ?)
 
et ces gros crétins qui décident des paramètres par défaut de PHP ont eu la merveilleuse idée de mettre cette daube à on par défaut.
 
c'est de la merde et c'est des gros tocards, et je vois pas en quoi c'est troller que de dire une vérité. putain, le libre et le gnu ça peut être que bien et génial ? c'est quoi c'te règle piniouf là ?


[:mlc] Putain mais t'as lu où que j'disais tout ça ?
Bon alors de 2 choses l'une : soit t'argumentes (positivement, négativement, j'm'en fous) de façon posée et sans balancer des généralités à la con ni d'insultes, soit tu te casses. J'ai pas posé ce topic pour aider les trolls anti ou pro-PHP ; y a une feature dont l'utilisation me paraît douteuse, j'lis un article qui est contre, donc j'demande des avis CONSTRUCTIFS et RESPECTUEUX.
 
Merci.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 22-01-2004 à 15:14:52    

select * from maTable where field = \'toto\'
 
Ben désolé, mais c'est pas du SQL 92.
 
Et le souci, c'est qu'avec cette daube activée (qui a certainement son utilité dans 1% des cas) on peut pas se débarrasser ce ces \' de merde.
 
Ca te va comme argument ?

Reply

Marsh Posté le 22-01-2004 à 15:16:15    

MagicBuzz a écrit :


Ca te va comme argument ?


C'est déjà mieux :D Désolé hein, mais j'aime pas les phrases à haut potentiel belliqueux :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 23-01-2004 à 01:12:19    


Perso je suis plutôt contre... En principe cette fonction magique est censée empecher les sql injection et cie... C'est bien pour les boolays mais oh maitre que nous sommes on en a pas besoin :o
 
1. La plupart des sgbd te permettent d'interdire d'envoyer plusieurs requêtes par défaut (c'est le cas de mysql), donc de toute facon ca limite déjà les injections (ok y a tjs moyen de modifier la requête en elle même mais pas d'en faire 2).
 
2. Ca a en effet la conséquence de souvent ne pas enlever ces * de quotes dans un affichage, quotes que l'on n'a jamais foutues nous même donc qu'on comprends pas toujours d'ou ca vient (jusqu'à ce qu'on découvre la feautre :o). Bref, c'est pas du tout parfait.
 
3. Perso pour tout ce qui est SQL j'ai ma petite classe (un rien plus complexe que ca mais bon) qui en gros me permet de stocker toutes mes requêtes dans un fichier (c pas tout a fait ca mais je vais simplifier :D) et de remplacer des variables par ce dont j'ai envie... variables qui sont évidemment encodées et vérifiées pour éviter tout problème... Donc pas de bug, donc pas de magic quote, donc youplaboum le monde est parfait [:ddr555]

Reply

Marsh Posté le 23-01-2004 à 01:24:34    

MagicBuzz a écrit :

select * from maTable where field = \'toto\'
 
Ben désolé, mais c'est pas du SQL 92.
 

espece de cretin, c pas la que ca se met les backslashes  [:kiki]
 

Citation :

select * from maTable where field = 'c\'est nul tes arguments';


Message édité par fabien le 23-01-2004 à 01:24:45

---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 23-01-2004 à 01:57:54    

fabien > select * from maTable where field = 'c\'est nul tes arguments';
 
Ouais, cool, en effet (enfin, ça dépends, on peut quand même se retrouver avec des quotes placées n'importe où si on fait pas gaffe).
 
Dans tous les cas, fait passer ta super requpète à SQL Server par exemple, et il va t'en dire des nouvelles. Le \' n'est pas la façon d'échapper les quote en SQL, à partir de là, c'est une hérésie que magicquote foute des \'.
 
Ce serait à la limite des '' à la place, je dis pas (ça n'en reste pas moins goret) au mois ça serait un minimum compatible avec sa fonction première.

Reply

Marsh Posté le 23-01-2004 à 02:02:57    

y'aurait pas un leger probleme dans c't'article, avec leurs ?> qui trainent dans leurs quotes?
un problem de magic quotes peut etre?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 23-01-2004 à 02:08:19    

Zion a écrit :


Perso je suis plutôt contre... En principe cette fonction magique est censée empecher les sql injection et cie... C'est bien pour les boolays mais oh maitre que nous sommes on en a pas besoin :o

je suis contre aussi, mais je vois pas en quoi ça protegerait d'une "sql injection" ?
(j'aime bien les nu-hackerz et leurs termes branchés pour désigner un truc trivial)
un exemple concret?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 23-01-2004 à 09:51:30    

select * from users where login = '$login' and password = '$password'
 
=> Login = "MagicBuzz"
=> Password = "Y vous zemmerde' or 1 = 1 --"
 
Tu peux tester ça...
 
Ca transforme ta requête en :
 
select * from users where login = 'MagicBuzz' and password = 'Y vous zemmerde' or 1 = 1 --'
 
Ce qui est à la fois valide, et fera en sorte que la requête retournera systématiquement une ligne même si le mot de passe est mauvais.

Reply

Marsh Posté le 23-01-2004 à 09:53:23    

Avec les quotes magiques, la requête devient select * from users where login = 'MagicBuzz' and password = 'Y vous zemmerde\' or 1 = 1 --'  
 
Et ça plante plus... Sauf si on utilise autrechose que MySQL.
L'avantage c'est qu'avec SQL Server, ça plantera tout le temps dans tous les cas dès qu'il y a une quote. Au moins on est blindés :sarcastic:

Reply

Marsh Posté le 23-01-2004 à 09:57:45    

ha excellent. merci pour l'exemple.
'fin bon, faut vraiment etre à la ramasse pour pas voir que les ' posent probleme aussi.
d'un autre côté je me demande si j'aurais pensé à échaper les quotes sur un champ de password.
tiens jvais essayer sur l'intranet ici pour voir


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 23-01-2004 à 09:59:43    

the real moins moins a écrit :

ha excellent. merci pour l'exemple.
'fin bon, faut vraiment etre à la ramasse pour pas voir que les ' posent probleme aussi.
d'un autre côté je me demande si j'aurais pensé à échaper les quotes sur un champ de password.
tiens jvais essayer sur l'intranet ici pour voir


 
ben perso, c'est comme ça que j'ai réussi à hacker mon propre site, suite à quoi j'ai utilisé les magic quotes (ouais je sais c'est mal :o)  
va falloir que je trouve une meilleur solution :/


---------------
IVG en france
Reply

Marsh Posté le 23-01-2004 à 10:15:44    

La fonction "quote()" que je poste une fois par semaine (certes, je l'écris en ASP, m'enfin c'est pas la mort à traduire en PHP...) est LA solution, à la fois SIMPLISSIME et EFFICACE pour pas avoir ce problème.
 
En entrée, une chaîne.
 
En sortie, une chaîne entre guillemets avec toutes les quotes à l'intérieur doublées. C'est simple comme choux, et c'est inviolable. T'as juste à utiliser SYSTEMATIQUEMENT cette fonction lorsque tu alimentes tes requêtes en données, même si c'est des constantes, même si t'es sûr qu'il n'y a pas de quote, dans TOUS les cas.
Sur un site de commerce, je vous conseille même IMPERATIVEMENT d'utiliser cette technique aussi (ET SOURTOUT) pour les nombres.
 
Parceque...
 
insert into basket_line (codpro, qty) values ($codpro, $qty)
 
bah...
 
Si l'utilisateur peut saisir la quantité, il lui suffit de mettre "0); update produits set prix = 0; commit;" dans la quantité, et je vous laisse imaginer ce que ça donne... Et là, magicquote n'y peut rien (bah ouais, c'est à la fois merdique et inutile ce truc...)
 
Alors que si tu vous une chaîne qui contient un nombre dans un champ numérique, la norme SQL prévoit le transtypage implicite. Par contre, si la chaîne n'est pas un nombre (ici c'est le cas) ben ça plante.
 
Et vous allez me dire "oui mais sur le site on bloque la taille du champ, pis on a un contrôle en JS, puis un autre en PHP avant d'aller dans la requête gniagnia".
 
Vous verrez dans 2 ans quand une personne (ou vous-même) viendra faire une modif dans votre code, si elle va bien se faire chier à refaire les tests. "c'est quoi ce truc ? je vire".

Reply

Marsh Posté le 23-01-2004 à 10:18:03    

Peros, pour tout champ rentré par l'utilisateur, j'fais systématiquement une épuration sur les caractères sensibles : ' % * en font partie.
Je pense que j'vais utiliser ça en lieu et place des magic quotes.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 23-01-2004 à 10:21:58    

perso, j'utilise jamais LIKE, du coup j'ai pas à me faire ch*er avec % et * ;)

Reply

Marsh Posté le 23-01-2004 à 10:23:45    

Taiche a écrit :

Peros, pour tout champ rentré par l'utilisateur, j'fais systématiquement une épuration sur les caractères sensibles : ' % * en font partie.
Je pense que j'vais utiliser ça en lieu et place des magic quotes.

ya la fonction addslashes() si tu veux pas utiliser les magic quotes :o


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 23-01-2004 à 10:24:45    

addSlashes est aussi merdique que magicquote, puisque \' N'EST PAS STANDARD. Ca ne figure pas dans la norme SQL.
 
Avec Oracle :
 
http://perso.wanadoo.fr/magicbuzz/sql.gif
 
Idem avec SQL Server.
 
A ma connaissance, seul MySQL supporte ce truc.


Message édité par MagicBuzz le 23-01-2004 à 10:29:53
Reply

Marsh Posté le 23-01-2004 à 10:25:17    

Oui mais le monsieur ne connait que mysql faut l'excuser :D

Reply

Marsh Posté le 23-01-2004 à 10:26:10    

MagicBuzz a écrit :

perso, j'utilise jamais LIKE, du coup j'ai pas à me faire ch*er avec % et * ;)


Bin ouais mais moi j'fais une sorte de moteru de recherche, donc... (d'ailleurs, si vous avez des scénarios de test intéressants, chu preneur :D)

fabien a écrit :

ya la fonction addslashes() si tu veux pas utiliser les magic quotes :o


Ouais mais ça résoud pas le pb des % et des * [:ddr555]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 23-01-2004 à 10:26:17    

MagicBuzz a écrit :

addSlashes est aussi merdique que magicquote, puisque \' N'EST PAS STANDARD. Ca ne figure pas dans la norme SQL.

t'es lourd :o
 
dans la norme SQL tu fait comment alors pour echaper les caracteres speciaux ?


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 23-01-2004 à 10:27:05    

fabien a écrit :


dans la norme SQL tu fait comment alors pour echaper les caracteres speciaux ?  


C'est 2 simples quotes genre '', je crois.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 23-01-2004 à 10:27:39    

Taiche a écrit :


Bin ouais mais moi j'fais une sorte de moteru de recherche, donc... (d'ailleurs, si vous avez des scénarios de test intéressants, chu preneur :D)
 
Ouais mais ça résoud pas le pb des % et des * [:ddr555]

t'as un url vers ton moteur ?


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed