Les magic quotes ou guillemets magiques
Formation
En Semi-présenciel Paris
Description
-
Typologie
Formation
-
Méthodologie
En semi-présentiel
-
Lieu
Paris
Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.
Les sites et dates disponibles
Lieu
Date de début
Date de début
Les Avis
Le programme
Bienvenue dans ce tutoriel sur les magic quotes, aussi appelés les guillemets magiques. Je vais vous expliquer ce que sont les magic quotes et comment les désactiver.
C'est quoi cette bestiole ?Les magic quotes ou guillemets magiques sont une protection de PHP qui effectue automatiquement des addslashes (place un \ devant les ' pour les échapper) sur les valeurs reçues en HTTP.
Exemple de la fonction addslashes :
<?php $chaine_non_protegee = "S'alut !"; // une phrase contenant un ' $chaine_protegee = addslashes($chaine_non_protegee); // le ' est échappé echo $chaine_protegee; // affiche : S\'alut ! ?>Cette protection est considérée comme une sécurité pour le développeur, car il n'a plus à faire la conversion lui-même pour être protégé des injections SQL (détournements de requêtes en utilisant les apostrophes). L'échappement est automatiquement fait.
Mais ce comportement est de plus en plus remis en cause pour des questions de performance et de facilité de programmation.
En effet la conversion n'est pas toujours nécessaire, et l'activation de cette protection implique de toujours savoir d'où viennent les données qu'on utilise. Si elles viennent de la requête HTTP, elles sont déjà converties ; si elles viennent d'un fichier (d'une base de données ou d'un calcul), elles ne le sont pas. Ceci entraîne souvent des oublis de conversion de données ne provenant pas de la requête HTTP.
Il est donc préférable de désactiver les magic quotes.
Désactiver les magic quotesSi vous décidez de désactiver les magic quotes, il faut que vous pensiez bien à sécuriser vos requêtes SQL à l'aide de la fonction mysql_real_escape_string ou de la fonction addslashes.
Exemple de requête sécurisée :
<?php $pseudo = mysql_real_escape_string($_GET['pseudo']); // On protège d'abord la variable $_GET['pseudo'] $reponse = mysql_query("SELECT champ1, champ2 FROM membre WHERE pseudo = '$pseudo' "); // puis on l'utilise dans une requête ?>Il existe deux façons de désactiver les guillemets magiques, je vais vous les présenter toutes les deux.
La première est surtout pratique si vous avez votre propre serveur, et que personne ne risque de modifier la configuration de PHP.
La seconde est pratique car elle permet de fonctionner sur n'importe quel serveur (avec ou sans les magic quotes).
Je vous conseille, par conséquent, la seconde. :p
Vous êtes en hébergement dédié ("désactivation dans le fichier de configuration")Si vous êtes en hébergement dédié, vous devez pouvoir accéder au fichier de configuration de PHP. Il s'agit du fichier php.ini.
Le php.ini est un fichier texte ASCII divisé en plusieurs sections, chaque section permettant de configurer différents paramètres (chemins d'accès des fichiers, changement des paramètres de sessions et des bases de données, activation d'extensions).
Trouvez l'endroit où il y a :
;;;;;;;;;;;;;;;;; ; Data Handling ; ;;;;;;;;;;;;;;;;;Puis descendez un peu, vous devriez trouver ceci :
; Magic quotes ; ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of \'). magic_quotes_sybase = OffCe sont les valeurs par défaut.
Pour désactiver les magic quotes, mettez magic_quotes_gpc à Off. Normalement, magic_quotes_runtime et magic_quotes_sybase sont désactivés ; s'ils ne le sont pas, mettez-les à Off.
Si vous êtes en hébergement mutualisé, vous n'avez pas accès au php.ini, l'activation des magic quotes dépend de votre hébergeur. Beaucoup d'hébergeurs continuent à activer cette directive pour rester compatibles avec les anciens scripts, mais d'autres la désactivent.
Pour savoir si les magic quotes sont activés sur votre serveur, utilisez la fonction get_magic_quotes_gpc(). Cette fonction renvoie 1 s'ils sont activés, sinon 0.
S'ils sont activés, il faut alors contrer leur effet. Il faut enlever les \ ajoutés. Il existe pour cela la fonction stripslashes().
T'es gentil, mais c'est pas très pratique d'appliquer stripslashes sur toutes les variables extérieures ($_POST, $_GET et $_COOKIE) . Si je dois faire $variable = stripslashes($_GET['variable']); pour chaque variable, c'est nul !
C'est vrai, mais heureusement la fonction (eh oui, encore une !) array_map va nous sauver.
Cette fonction permet d'appliquer une fonction sur tous les éléments d'un tableau. Cela a l'air compliqué, mais c'est simple.
Vous allez comprendre, voici un code qui annule l'effet des magic quotes :
<?php function stripslashes_r($var) // Fonction qui supprime l'effet des magic quotes { if(is_array($var)) // Si la variable passée en argument est un array, on appelle la fonction stripslashes_r dessus { return array_map('stripslashes_r', $var); } else // Sinon, un simple stripslashes suffit { return stripslashes($var); } } if(get_magic_quotes_gpc()) // Si les magic quotes sont activés, on les désactive avec notre super fonction ! ;) { $_GET = stripslashes_r($_GET); $_POST = stripslashes_r($_POST); $_COOKIE = stripslashes_r($_COOKIE); } ?>Ce code permet donc de contrer l'effet des magic quotes. Les magic quotes agissent avant l'analyse du code, ce petit code est donc à placer au tout début de votre page.
Même si les guillemets magiques sont désactivés sur votre serveur, utilisez ce code. En effet, si par exemple la configuration du serveur est modifiée ou que vous changez de serveur, votre application marchera dans tous les cas !
Un autre exemple : vous avez fait un forum. Sur votre site, les gens peuvent le télécharger pour l'installer sur leur serveur : du coup, quelle que soit leur configuration, votre application fonctionnera !
Voilà, ce tuto est fini : j'espère avoir été le plus clair possible. Si vous avez des questions / remarques ou autres, n'hésitez pas !
Merci aux zcorrecteurs (surtout ptipilou), pour leurs corrections et relectures. :)
f
- #
Très heureux de voir que nos cours vous plaisent, déjà 3 pages lues aujourd'hui ! Vous pouvez continuer la lecture de nos cours en devenant un Roomie, un membre de la communauté d'OpenClassrooms. C'est gratuit !
Vous pourrez aussi suivre votre avancement dans le cours, faire les exercices et discuter avec les autres Roomies.
S'inscrire Se connecter- Thématiques du cours : PHP Web
Chaque cours est créé par un professeur ou un expert dans le domaine. Il est composé d'une ou plusieurs parties et peut comporter du texte, des images (schéma, illustration) et des vidéos. Chaque partie d'un cours certifiant est ponctuée d'exercices de 2 types : Des quiz corrigés automatiquement Des devoirs libres (exemple : créer un site web avec des consignes précises). Ces devoirs sont évalués par les pairs. Chaque devoir est corrigé 3 fois par 3 autres élèves, dans un processus en double aveugle, selon un barème fixé par le professeur. La note finale est la moyenne des 3 notes reçues sur le devoir. 50% des devoirs corrigés par les pairs obtiennent quasiment les 3 mêmes notes, avec une variance inférieure à 1. La recherche académique montre d'ailleurs que l'évaluation par les pairs peut être aussi précise que celle des professeurs.
Les magic quotes ou guillemets magiques
