PHP = envoi de guillemets et reception de \"
Résolu
-RoRo-
Messages postés
98
Date d'inscription
Statut
Membre
Dernière intervention
-
le père -
le père -
A voir également:
- PHP = envoi de guillemets et reception de \"
- Accusé de reception gmail - Guide
- Problème de réception tv pas de signal aujourd' hui - Guide
- Serveur de reception mail - Guide
- Easy php - Télécharger - Divers Web & Internet
- Mainlevée de l’envoi international ✓ - Forum Consommation & Internet
3 réponses
Bonjour
Si PHP ajoute des \ devant les guillemets, c'est que les "magic quotes" sont actifs. Dans ce cas, PHP ajoute automatiquement des \ devant les guillemets simples, les guillemets doubles, les \ et les caractères nuls dans les données reçues par GET, POST, et les COOKIES
Pour les supprimer, je te conseille de faire une fonction qui teste si les magic-quotes sont actifs, et appelle strip_slashes si nécessaire :
Quand tu as besoin de $_POST['machin'] utilise RecupChaine($_POST['machin'])
Si PHP ajoute des \ devant les guillemets, c'est que les "magic quotes" sont actifs. Dans ce cas, PHP ajoute automatiquement des \ devant les guillemets simples, les guillemets doubles, les \ et les caractères nuls dans les données reçues par GET, POST, et les COOKIES
Pour les supprimer, je te conseille de faire une fonction qui teste si les magic-quotes sont actifs, et appelle strip_slashes si nécessaire :
function RecupChaine($chaine) { if (get_magic_quotes_gpc()==1) return stripslashes($chaine); // il y avait magic return $chaine; // il n'y avait pas magic }
Quand tu as besoin de $_POST['machin'] utilise RecupChaine($_POST['machin'])
Ton problème est normal, tu 'escape' les guillemets pour éviter les sql injection (sécu web) et autres erreurs
Tout d'abord a quoi sa sert de mettre les \ devant certains caractères spéciaux ? C'est pour éviter que php interprète ton caractère spéciale comme du code.
Imaginons tu as une requete sql dans du php du genre :
si le mec rentre dans ton formulaire dans le champs nickname: admin
et dans le champ password : aze' OR 1=1
ben tu remplace dans ta requete:
SELECT * FROM users where nickname='admin' AND password='aze' OR 1=1
On s'en fiche que le mot de passe ne soit pas bon :] car OR 1=1 sera toujours vrai et donc zappera ton pass et du coup si c'est un formulaire d'identification l'utilisateur n'aura pas besoin de mot de passe pour se connecté a un compte.
Quand tu fais addslashes($_POST['nickname']) ca rajoute des \ devant tes guillemets et autres caractères spéciaux. Du coup les codes malveillants comme celui au dessus ne pourront plus s'exécuter (et c'est ce que tu as du faire pour avoir tes \, sinon c'est que tes magic_quote sont activé dans ton php.ini).
Une fois que tu veux afficher ton code ta juste a utiliser la commande stripslashes($ton_texte); sa enlèvera les \ devant les caractères spéciaux ;) j'ai pas mal résumé mais en gros c'est ça :)
Tout d'abord a quoi sa sert de mettre les \ devant certains caractères spéciaux ? C'est pour éviter que php interprète ton caractère spéciale comme du code.
Imaginons tu as une requete sql dans du php du genre :
$requete = "SELECT * FROM users where nickname='". $_POST['nickname'] ." AND password='". $_POST['password'] ."'"; mysql_query($requete);
si le mec rentre dans ton formulaire dans le champs nickname: admin
et dans le champ password : aze' OR 1=1
ben tu remplace dans ta requete:
SELECT * FROM users where nickname='admin' AND password='aze' OR 1=1
On s'en fiche que le mot de passe ne soit pas bon :] car OR 1=1 sera toujours vrai et donc zappera ton pass et du coup si c'est un formulaire d'identification l'utilisateur n'aura pas besoin de mot de passe pour se connecté a un compte.
Quand tu fais addslashes($_POST['nickname']) ca rajoute des \ devant tes guillemets et autres caractères spéciaux. Du coup les codes malveillants comme celui au dessus ne pourront plus s'exécuter (et c'est ce que tu as du faire pour avoir tes \, sinon c'est que tes magic_quote sont activé dans ton php.ini).
Une fois que tu veux afficher ton code ta juste a utiliser la commande stripslashes($ton_texte); sa enlèvera les \ devant les caractères spéciaux ;) j'ai pas mal résumé mais en gros c'est ça :)
Presque d'accord, mais pas complètement.
C'est mysql qui est trompé, pas PHP, Du moins dans l'exemple que tu donnes.
D'autre part, la bonne manière d'échapper les guillemets pour exécuter une requête, ce n'est pas addslashes, mais mysql_real_escape_string qui est vraiment faite pour ça alors que addslashes, par exemple, ne prévoit pas les cas des retour chariot.
C'est mysql qui est trompé, pas PHP, Du moins dans l'exemple que tu donnes.
D'autre part, la bonne manière d'échapper les guillemets pour exécuter une requête, ce n'est pas addslashes, mais mysql_real_escape_string qui est vraiment faite pour ça alors que addslashes, par exemple, ne prévoit pas les cas des retour chariot.
Merci, ça fonctionne !!!