[Résolu] addslashes() vs mysql_escape_string()

addslashes() vs mysql_escape_string() [Résolu] - PHP - Programmation

Marsh Posté le 05-12-2007 à 16:52:44    

Salut tous,
 
J'ai utilisé addslashes() depuis des années devant mes strings à encoder dans une database via un mysql_query , vu que je travaille généralement sur des serveurs sans la gpc magic quotes , sinon par souci de portabilité je teste celle-ci avec get_magic_quote_gpc()
 
Récemment, un collègue m'a fortement conseillé d'utiliser mysql_escape_string() à la place, parce que cette fonction est désignée plus particulièrement pour des requêtes MySQL.
 
J'suis allé voir sur php.net et apparemment les deux fonctions fonctionnent de manière sensiblement identique, à ceci près que escape_string semble échapper davantage de trucs.
 
Considérant que l'on ne changera probablement pas de moteur de bases de données demain (je doute que le mysql_escape_string fonctionne avec des requêtes Oracle... me trompé-je?), est-ce que je dois prendre la peine, par souci de "propreté", ou d' "efficacité", de remplacer mes addslashes par des escape_string ?  
Et est-ce que , à l'avenir, vous me conseilleriez de travailler avec escape_string exclusivement, dans un contexte php + MySQL ?
 
Ou avez-vous plsu d'infos sur le sujet ?


Message édité par ZeBix le 05-12-2007 à 17:11:24
Reply

Marsh Posté le 05-12-2007 à 16:52:44   

Reply

Marsh Posté le 05-12-2007 à 16:53:57    

Ne jamais utiliser addslashes, ça marche pas et c'est le meilleur moyen d'avoir une faille de sécurité dans ton appli.
 
Pour MySQL, utiliser mysql_real_escape_string
Pour Postgres, utiliser pg_escape_string
Pour Oracle, vas voir dans oci8
 
Et dans tous les cas, c'est une encore meilleure idée d'utiliser PDO

Message cité 1 fois
Message édité par masklinn le 05-12-2007 à 16:59:22

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2007 à 16:55:10    

Et de manière plus générale : mieux vaut utiliser la fonction propre au SGBD.


Message édité par dwogsi le 05-12-2007 à 16:55:24

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 05-12-2007 à 16:59:06    

masklinn a écrit :

Ne jamais utiliser addslashes, ça marche pas


Je ne suis pas d'accord, addslashes marche très bien.
 

masklinn a écrit :

et c'est le meilleur moyen d'avoir une faille de sécurité dans ton appli


Peux-tu m'en dire plus ?
 

Reply

Marsh Posté le 05-12-2007 à 17:03:58    

ZeBix a écrit :


Je ne suis pas d'accord, addslashes marche très bien.


Oh oui, j'ai jamais dit que ça marchait pas, juste que ce que ça fait n'a aucun intérêt et ne protège pas contre les injections SQL

ZeBix a écrit :


Peux-tu m'en dire plus ?


Les caractères \x00, \n, \r, et \x1a ne sont pas échappés par addslashes et permettent donc d'effectuer des injections sous MySQL, il y a des problèmes identiques avec les autres SGBD.

 

Pour le cas addslashes vs mysql_real_escape_string: http://shiflett.org/blog/2006/jan/ [...] ape-string et les réactions à ce post http://www.jansch.nl/2007/11/30/do [...] e-escapes/ et http://wonko.com/article/362


Message édité par masklinn le 05-12-2007 à 17:04:26

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-12-2007 à 17:05:12    

ZeBix a écrit :


Je ne suis pas d'accord, addslashes marche très bien.
 

Ca marche, mais ça ne protège pas (c'est pas fait pour) Donc pour reprendre les dire d'un gas que je connais : "Ca marche, mais ça marche pas."
 

ZeBix a écrit :


Peux-tu m'en dire plus ?
 

Oui, on peut : il n'y a pas que les ' et " qui sont dangeureux pour mysql. Si tu veux en savoir encore plus, il faut fouiller le net ou la doc de mysql pour trouver des exemples pratiques d'attaques.

Reply

Marsh Posté le 05-12-2007 à 17:11:07    

Oki :)
En fait mon idée au départ est bien sûr d'éviter de couper mes string à cause d'apostrophes qui en feraient partie .. mais vu sous cet angle (merci Masklinn pour les liens) à savoir les injections en même temps, il vaut clairement mieux prendre l'habitude du escape_string.
 
Case closed, merci !

Reply

Marsh Posté le 05-12-2007 à 17:12:53    

ZeBix a écrit :

Oki :)
En fait mon idée au départ est bien sûr d'éviter de couper mes string à cause d'apostrophes qui en feraient partie


Utilise sprintf ou (encore mieux) PDO et les prepared statements.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

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