Les magic quotes : bien/pabien ? - PHP - Programmation
Marsh Posté le 22-01-2004 à 14:16:18
Putain, 20 vues et 2 votes, chu bien avancé Parlez, bon dieu
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
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 'fin moi j'l'ai jamais utilisé autrement
Marsh Posté le 22-01-2004 à 14:28:19
magic quote ON pour moi... jamais eu de problemes
et aussi stripslashes si besoin...
le mec qui a ecrit l'article a l'air un peu cinglé
Citation : |
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 'fin moi j'l'ai jamais utilisé autrement |
en gros c quoi les magic quotes ? ca rajoute des \ ou il faut pr mettre des cotes dans une chaine de caractères ?
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
Uriel : 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
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.
Marsh Posté le 22-01-2004 à 14:43:08
nraynaud a écrit : |
là suis d'accord, moi c'etait pour un usage personnel alors j'ai fais la faignasse
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. |
+1
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.
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
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 |
Marsh Posté le 22-01-2004 à 15:00:41
Merci à tous pour ces retours
Quant aux trolleurs, ils peuvent aller se faire mettre foutre plaisir à troller ailleurs
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 ?
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à ?
Marsh Posté le 22-01-2004 à 15:10:39
MagicBuzz a écrit : |
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?'
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'
Marsh Posté le 22-01-2004 à 15:12:11
s'd'la merde
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 et pis vous avez qu'à être moins succeptible, le 2nd degré ça existe aussi
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 ?) |
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.
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 ?
Marsh Posté le 22-01-2004 à 15:16:15
MagicBuzz a écrit : |
C'est déjà mieux Désolé hein, mais j'aime pas les phrases à haut potentiel belliqueux
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
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 ). 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 ) 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
Marsh Posté le 23-01-2004 à 01:24:34
MagicBuzz a écrit : select * from maTable where field = \'toto\' |
espece de cretin, c pas la que ca se met les backslashes
Citation : select * from maTable where field = 'c\'est nul tes arguments'; |
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.
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?
Marsh Posté le 23-01-2004 à 02:08:19
Zion a écrit : |
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?
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.
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
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
Marsh Posté le 23-01-2004 à 09:59:43
the real moins moins a écrit : ha excellent. merci pour l'exemple. |
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 )
va falloir que je trouve une meilleur solution
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".
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.
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 *
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. |
ya la fonction addslashes() si tu veux pas utiliser les magic quotes
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 :
Idem avec SQL Server.
A ma connaissance, seul MySQL supporte ce truc.
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 )
fabien a écrit : ya la fonction addslashes() si tu veux pas utiliser les magic quotes |
Ouais mais ça résoud pas le pb des % et des *
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
dans la norme SQL tu fait comment alors pour echaper les caracteres speciaux ?
Marsh Posté le 23-01-2004 à 10:27:05
fabien a écrit : |
C'est 2 simples quotes genre '', je crois.
Marsh Posté le 23-01-2004 à 10:27:39
Taiche a écrit : |
t'as un url vers ton moteur ?
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.