PHP = envoi de guillemets et reception de \"
Résolu/Fermé
-RoRo-
Messages postés
98
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
14 mai 2010
-
1 avril 2010 à 14:17
le père - 1 avril 2010 à 17:02
le père - 1 avril 2010 à 17:02
A voir également:
- PHP = envoi de guillemets et reception de \"
- Problème de réception tv pas de signal aujourd' hui - Guide
- Accusé de reception gmail - Guide
- Accusé de reception outlook - Guide
- Serveur de reception - Guide
- Easy php - Télécharger - Divers Web & 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'])
ThyB45
Messages postés
9
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
11 juin 2010
Modifié par ThyB45 le 1/04/2010 à 15:14
Modifié par ThyB45 le 1/04/2010 à 15:14
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.
jeangilles
Messages postés
816
Date d'inscription
samedi 21 juin 2008
Statut
Membre
Dernière intervention
17 juillet 2012
186
1 avril 2010 à 14:58
1 avril 2010 à 14:58
Ben c'est plutôt normal en fait
Qu'est ce qui ne va pas ?
Tu voudrais enlever les \ ?
Passe par la méthode str_replace pour les enlever
Qu'est ce qui ne va pas ?
Tu voudrais enlever les \ ?
Passe par la méthode str_replace pour les enlever
1 avril 2010 à 15:37
Merci, ça fonctionne !!!