begin process at 2012 05 31 10:28:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Web 2.0

 > 

Autre

 > 

Sécurité : magic_quote_gpc et base de données


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Sécurité : magic_quote_gpc et base de données

dimanche 17 juillet 2011 à 11:06:11 | Sécurité : magic_quote_gpc et base de données

dgdf

Bonjour à tous,

Je viens vers vous pour un pb de "magic quotes" ... Développeur PHP depuis un petit moment, je pensais avoir tout compris sur les magic quotes, mais là je ne suis plus sûr de moi.
Je travaille sur la migration d'une base de données vers mysql. D'après tout les sujets que j'ai pu lire sur les magic quotes, il est fortement conseillé de mettre magic_quotes_gpc à off, ainsi que magic_quotes_runtime. Ce que j'ai fait. Ensuite j'utilise une fonction appellée secure_var_insert() :

Code PHP :
	function secure_var_insert($varInsert) {
		if (get_magic_quotes_gpc()==1) {
			return ($varInsert);
		} else {
			return (addslashes($varInsert));
		}
	

pour chaque insert que je fais dans la base :

Code PHP :
	 $variable0 = secure_var_insert($liste[0]); 
	 $variable1 = secure_var_insert($liste[1]); 
	 $variable2 = secure_var_insert($liste[2]);
	 $variable3 = date("Y-m-d H:i:s",strtotime($liste[3]));
 	 $variable4 = secure_var_insert($liste[4]);
	 $variable5 = date("Y-m-d H:i:s",strtotime($liste[5]));
	 $variable6 = secure_var_insert($liste[6]);
	 $variable7 = secure_var_insert($liste[7]);
	 $variable8 = secure_var_insert($liste[8]);
	 $variable9 = secure_var_insert($liste[9]);
 	 $variable10 = secure_var_insert($liste[10]);
	 $variable11 = secure_var_insert($liste[11]);
	 //$variable12 = transformerEnNomDeFichier($variable0);

echo $variable0."/".$variable1."/".$variable2."/".$variable3."/".$variable4."/".$variable5."/".$variable6."/".$variable7."/".$variable8."/".$variable9."/".$variable10."/".$variable11;

	 /*Ajouter un nouvel enregistrement dans la table*/
	 $sql = "INSERT INTO artiste (nom_artiste, bio_artiste, id_contact, type_contact, date_creation, date_fin, id_photo, ville, url_site_web, gestion_droit, nom_stockage, old_id_artiste, old_contact, old_style, old_manque) VALUES('$variable0','$variable1','','','$variable3','$variable5','1','$variable10','$variable11', '$variable6', '$variable0','$variable7','$variable2','$variable9', '$variable8')";

	 $res = mysql_query($sql) or die(mysql_error());

	 if ($res)
	 {
		echo "ligne $j (id=".mysql_insert_id()."): ok";
	 }
	 else {
		echo "ligne $j : raté (".mysql_error().")";
		exit();
	 }


Tout ce code fonctionne bien. Par contre, ce que je n'arrive pas à comprendre, c'est que dans la base, aucun des caractères n'est échappé. Quand j'affiche à l'écran le contenu des variables après qu'elles soient passées dans la fonction secure_var_insert, pas de pb, les caractères sont bien échappés, tout se passe bien. Par contre ce qui est inséré dans la base, aucun caractère n'est échappé ... Ce n'est pas normal, tout devrait l'être normalement, non ?

Quelqu'un pourrait-il m'expliquer ?

Je vous remercie par avance pour vos réponses.
dimanche 17 juillet 2011 à 13:34:53 | Re : Sécurité : magic_quote_gpc et base de données

NHenry

Membre Club Administrateur CodeS-SourceS
Bonjour,

Tout simplement, quand tu ajoutes par exemple :
"Mon Texte avec des ca'acte'es etranges"
Sera transformé en :
"\"Mon Texte avec des ca\'acte\'es etranges\""
Quand tu ajoutes cela à ta requête, ça devient :
"INSERT INTO ... VALUES(..., '\"Mon Texte avec des ca\'acte\'es etranges\"', ...")

Donc tu insères les texte sans le formatage, le formatage sert juste à éviter une injection SQL.

Mon site
dimanche 17 juillet 2011 à 16:25:56 | Re : Sécurité : magic_quote_gpc et base de données

cod57


bonjour
normalement en php5 c'est à off chez les hébergeurs actuels
mysql_real_escape_string protège des injections dans tout les cas
donc on evite ta méthode addslashes

Code PHP :

/*on doit être connecte a mysql pour cette fonction*/




foreach($liste as $k => $v){
    $v=mysql_real_escape_string($v);
    liste[$k]=$v;
    }


   $variable0 = $liste[0]; 
	...  
    
    
    $sql = "INSERT INTO artiste (
    
    nom_artiste,
    bio_artiste,
    id_contact,
    type_contact,
    date_creation,
    date_fin,
    id_photo,
    ville,
    url_site_web,
    gestion_droit,
    nom_stockage,
    old_id_artiste,
    old_contact,
    old_style,
    old_manque) 
    
    VALUES(
    
    '$variable0',
    '$variable1',
    '',
    '',
    '$variable3',
    '$variable5',
    '1',
    '$variable10',
    '$variable11',
    '$variable6',
    '$variable0',
    '$variable7',
    '$variable2',
    '$variable9',
    '$variable8'
    
    )";


et strip_slashes() en lecture pour enlever slash

Bonne programmation !
dimanche 17 juillet 2011 à 18:29:28 | Re : Sécurité : magic_quote_gpc et base de données

dgdf

Tout d'abord, grand merci à tous les deux pour avoir pris du temps pour me répondre.

Donc si j'ai bien compris, NHenry, quand je regarde directement dans ma base via phpMyAdmin, je dois voir le texte sans les échappements comme ceci : "Mon Texte avec des ca'acte'es etranges"

Si c'est bien ça, mon script fonctionne bien et j'évite les injections SQL. Par contre j'ai du me tromper précédemment sur d'autres applis, car je voyais en base les échappements. Cela veut dire que j'avais du laisser magic_quotes_gpc à on. Ceci dit pas de pb de sécurité, la sécurisation était plutôt faite en double alors.


cod57, l'hébergement est chez OVH, et en faisant un phpinfo(), les magic_quotes sont activées, ce qui m'a surpris d'ailleurs, je pensais comme vous qu'elles devaient l'être. Je les désactive donc par .htaccess on utilisant les directives suivantes :

SetEnv MAGIC_QUOTES 0

voilà voilà, encore merci d'avance pour vos réponses qui lèveront mes derniers doutes ...

Bien à vous,
dimanche 17 juillet 2011 à 19:42:34 | Re : Sécurité : magic_quote_gpc et base de données

NHenry

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Bonjour,

Oui, dgdf, tu as bien compris mon message, tu visualises les chaines sans les échappements dans ta bdd..

Tu le faisais en double, d'où l'affichage, mais au moins, c'est mieux 2 que pas du tout :)
Il faut juste ensuite, penser à utiliser la réciproque pour récupérer la chaine originale.

Mon site
dimanche 17 juillet 2011 à 21:35:12 | Re : Sécurité : magic_quote_gpc et base de données

dgdf

Merci beaucoup pour ta réponse ! C'est désormais très clair. Enfin ...

Le sujet est résolu.


Cette discussion est classée dans : insert, liste, var, magic, secure


Répondre à ce message

Sujets en rapport avec ce message

Saisie Automatique Sql [ par xeroxiss ] Bonjour à tout les petits ternautes rois du php ! Voila j'ai un petit soucis tout simple (je pense)... J'ai un formulaire en php, contenant des liste Liste Déroulante + Order [ par xeroxiss ] Bonjour à tous ! J'ai créer 2 petites listes déroulantes remplient d'une longue série de divers marques de pc.Elle sont donc "liées" à une bdd. Ce que php et sql [ par fatatra ] bonjour;j'essaie de rentrer des données dans ma bases a partir d'un formulaire.Ce queje fais c'est que je recupére les variable 'post' pour les mettre Liste déroulante [ par alex2100 ] Bonjour à tous,Voici mon problème :J'ai 2 liste déroulante dans un formulaire. Le premier est pour choisir un mois. Janvier</o Formulaire qui calcul [DEPLACE] [ par twinsen60 ] BonjourJ'aimerai faire une sorte de formulaire, avec des champs a remplir par le biais de "liste déroulante".Suivant mon choix de ma liste, j'ai plusi Liens et Requêtes ! [ par xeroxiss ] Bonjour tout le monde ! Voila j'ai une petite question qui peu preter a sourir mais je ne vois pas la solution à mon "probleme". Je voudrai juste savo probleme avec un code source [ par rixmo ] slut tout le monde .   mon probleme il est tres simple .et suis un debutant avec le php et je cpomprend pas bien.  j'ai un  code qui me signal une err explorer un repertoire [ par thejoker31 ] Bonjour je souhaite afficher un repertoire et ses sous (sous) repertoires à la facon d'un arbre et pouvoir afficher les elements contenus dans les sou Fatal error: Only variables can be passed by reference [ par attentio ] bONjour, j'ai une erreur [b]Only variables can be passed by reference [/b] sur mon if, qui semble venir de la fonctionvb()je ne comprends pas pourquoi exploitation de fichier csv uploadé [ par daris ] Bonjour à tous! J'ai un souci, aufait je recupere via un formulaire html un fichier csv de 5 colonnes sépareés par des virgule. Le téléchargement du


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 11,045 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales