addslashes() vs mysql_escape_string() [Résolu] - PHP - Programmation
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
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 ?
Marsh Posté le 05-12-2007 à 17:03:58
ZeBix a écrit :
|
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 :
|
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
Marsh Posté le 05-12-2007 à 17:05:12
ZeBix a écrit : |
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 : |
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.
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 !
Marsh Posté le 05-12-2007 à 17:12:53
ZeBix a écrit : Oki |
Utilise sprintf ou (encore mieux) PDO et les prepared statements.
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