par
Ryle » 31 août 2015, 12:08
Bonjour,
En fait, le "\" ne devrait pas apparaître une fois la donnée enregistrée en base. Celui-ci doit uniquement servir à protéger les caractères spéciaux lors de l'exécution de la requête. Si en base de données tu vois apparaître la chaîne " L\'apostrophe ", c'est qu'au moment de l'insertion en base, la requête sql a utilisé la valeur " L\\\'apostrophe ", ce qui indique que ta chaîne a été protégée deux fois... protéger une chaîne c'est bien, mais là c'est un peu trop
Pourquoi une double protection ? Parce que ton serveur php doit être dans une version <= 5.3 et configurée avec la directive magic_quotes_gpc à "on". Cette directive (qui a disparu avec php 5.4) protège automatiquement les variables que tu récupères via GET, POST, REQUEST ou COOKIES en faisant l'équivalent d'un addslashes(). Lorsque tu appelles mysql_real_escape_string() sur ces variables, tu doubles donc le traitement.
Pour éviter cela, le mieux est soit de désactiver cette directive et ne te fier qu'à ton code pour protéger les variables, ou si tu ne peux pas la désactiver, vérifier si celle-ci est active (get_magic_quotes_gpc()) et le cas échéant, en annuler les effets, de façon à ce que ton code puisse traiter les données telles qu'elles sont soumises (Il est par contre du coup indispensable de contrôler/protéger toutes les données transmises).
Pour plus d'information sur la directive en question :
http://php.net/manual/fr/security.magicquotes.what.php
L'avantage de ce fonctionnement plutôt que d'utiliser stripslahes à l'affichage, c'est que les données que tu as en base pourront servir à d'autres traitements que juste apparaitre sur une page php, et ne nécessiteront pas systématiquement d'être retraitées.
Bonjour,
En fait, le "\" ne devrait pas apparaître une fois la donnée enregistrée en base. Celui-ci doit uniquement servir à protéger les caractères spéciaux lors de l'exécution de la requête. Si en base de données tu vois apparaître la chaîne " L\'apostrophe ", c'est qu'au moment de l'insertion en base, la requête sql a utilisé la valeur " L\\\'apostrophe ", ce qui indique que ta chaîne a été protégée deux fois... protéger une chaîne c'est bien, mais là c'est un peu trop ;)
Pourquoi une double protection ? Parce que ton serveur php doit être dans une version <= 5.3 et configurée avec la directive magic_quotes_gpc à "on". Cette directive (qui a disparu avec php 5.4) protège automatiquement les variables que tu récupères via GET, POST, REQUEST ou COOKIES en faisant l'équivalent d'un addslashes(). Lorsque tu appelles mysql_real_escape_string() sur ces variables, tu doubles donc le traitement.
Pour éviter cela, le mieux est soit de désactiver cette directive et ne te fier qu'à ton code pour protéger les variables, ou si tu ne peux pas la désactiver, vérifier si celle-ci est active (get_magic_quotes_gpc()) et le cas échéant, en annuler les effets, de façon à ce que ton code puisse traiter les données telles qu'elles sont soumises (Il est par contre du coup indispensable de contrôler/protéger toutes les données transmises).
Pour plus d'information sur la directive en question :
http://php.net/manual/fr/security.magicquotes.what.php
L'avantage de ce fonctionnement plutôt que d'utiliser stripslahes à l'affichage, c'est que les données que tu as en base pourront servir à d'autres traitements que juste apparaitre sur une page php, et ne nécessiteront pas systématiquement d'être retraitées.