THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 magic_quote_gpc

(27-07-2007 13:06:26)


bonjour,

désolé de vous embeter encore avec cette histoire de magic_quotes mais je pense que rajouter un test de cette valeur dans le script thélia pourrait le rendre encore plus compatible sans alourdir le code...

je m'explique : l'autre jour, j'ai mentionné un risque d'injection sql dans le cas ou les magic_quotes n'étaient pas activées dans le php.ini (magic_quotes_gpc off)...
aujourd'hui je viens de me rendre compte d'un autre "bug" lié à cette valeur => quand magic_quotes_gpc est à off, si vous ajoutez une description à un produit à l'aide de tinymce par exemple, et que vous utilisez des styles prédéfinis, ce dernier ajoute les attributs class="style" dans votre code html... malheureusement, ces guillemets rajoutés par tinymce font planter mysql qui échoue sur sa requete car les guillemets ne sont pas protégés.... et du coup il ne comprend pas la requete.... ex: description="<ul><li class="     style">.....

mon point de vue:

- les magic_quotes sont à ON par défaut dans le php.ini mais on peut avoir besoin de les mettre à OFF pour certains scripts (c'est mon cas),
- certains hébergeurs peuvent les mettre à OFF par défaut, sans laisser la possibilité de modifier quoi que ce soit,
- citation : "Il est recommandé de développer les applications sans l'aide des guillemets magiques, et de protéger manuellement les données" tiré de php.net (http://fr.php.net/magic_quotes)

donc, si je peux me permettre une petite suggestion, je pense que cela serait pratique de modifier le fichier pre.php comme suit:

if (!get_magic_quotes_gpc()) {
              foreach ($_POST as $key => $value) $$key = addslashes($value);                             plus simple ==>     foreach ($_REQUEST as $key => $value) $$key = addslashes($value);
              foreach ($_GET as $key => $value) $$key = addslashes($value);
              }else{
              foreach ($_POST as $key => $value) $$key = $value;                                                   plus simple ==>     foreach ($_REQUEST as $key => $value) $$key = $value;
              foreach ($_GET as $key => $value) $$key = $value;
      }

de cette manière, plus de soucis avec les magic_quotes smile

j'ai volontairement posté ici plutot que sur le tracker (pardon Yoan smile) car je pense que cela peut etre instructif pour ceux qui débutent en php de comprendre ce que font ces "guillemets magiques" smile

steph

Last edited by stefan (27-07-2007 15:08:06)

Offline

#2 Re: magic_quote_gpc

(27-07-2007 14:01:16)


Nous avons là deux problèmes différents :

1) L'enregistrement et la lecture sur la base de données des descriptions de produits et contenus ne passe pas par des superglobales $_GET ou $_POSt (sauf erreur) et le remède proposé ci-dessus est donc (vraisemblablement) inopérant.

J'ai répondu, incomplètement, à ce problème dans un post précédent :

http://forum.thelia.fr/viewtopic.php?pid=1732#p1732

2) En ce concerne les superglobales, la version 3 de THELIA utilise $_REQUEST dans des conditions "cadrées", mais la pertinence de l'utilisation de la fonction que vous citez est à étudier, ne serait-ce que pour éviter des plantages suivant la configuration des serveurs.

Mes sources : PHP5 avancé 2eme edition

Offline

#3 Re: magic_quote_gpc

(27-07-2007 15:04:58)


je pense que vous n'avez pas bien cerné mon "probleme", je me suis probablement mal expliqué....

1) le script de création/modification d'un produit est un script de la partie Admin, qui se nomme produit_modifier.php,
2) la toute première ligne de code de ce fichier est : include("pre.php"),
3) l'édition de ce fichier pre.php montre clairement que ce sont les valeurs de $_GET et $_POST qui sont récupérées,
4) donc la solution proposée ci-dessus est tout à fait oppérante (enfin au moins sur mes différents serveurs de test).

l'utilisation de htmlentities est une autre solution je le reconnais, je rajouterais juste un détail, cette fonction convertit (par défaut) seulement les guillemets doubles, pour avoir les simples en plus, il faut lui passer un argument optionnel (ENT_QUOTES)...

enfin pour ce qui est des $_REQUEST, et leurs utilisation dans des conditions "cadrées", là c'est moi qui ne vous comprends pas smile

en effet, on peut voir dans moteur.php par exemple:

if(!isset($_REQUEST['prenom'])) $prenom=""; else $prenom=$_REQUEST['prenom'];

or, ici, moi je comprend : si la variable prenom n'est pas passée en GET ou en POST (donc dans la REQUEST qui englobe en fait toutes les méthode de transmission) alors elle est initialisée à null, sinon $prenom prend la valeur passée....

la seule différence que je vois ici avec l'utilisation du REQUEST est la simplification du code (une ligne au lieu de deux)... par contre aucun test des valeurs passées.... donc toujours possibilité d'erreur....

je suis peut-être un peu "lourd" avec mes histoires de magic_quotes et de test des valeurs passées par les formulaires, mais je pense qu'un script dont le but est de gérer une boutique en ligne avec options de commande, paiement.... doit être un minimum sécurisé.... et la sécurité passe (à mon avis) d'abord par la maitrise de tout ce qui se passe.....

voila, désolé pour ce long commentaire smile mais ce n'est pas  en faisant de la désinformation qu'on fait évoluer un projet...

steph

Offline

#4 Re: magic_quote_gpc

(27-07-2007 15:42:57)


C'est très clair. Il faudrait faire passer une moulinette de XSS et voir ce que ça donne.
A voir de ce côté-ci :
http://www.gnucitizen.org/xssdb/application.htm
http://www.darknet.org.uk/tag/xss

Et de façon plus générale par là :
http://en.wikipedia.org/wiki/Cross-site … rnal_links

Offline

#5 Re: magic_quote_gpc

(27-07-2007 15:58:08)


Heu ! bon je me suis aventuré dans un domaine ou j'avais pas le niveau.

htmlentities convertit par défaut non seulement les guillemets mais également les <, > et & ce qui est indispensable si l'on veut utiliser tinymce;

Je suis par ailleurs entièrement d'accord avec l'avant dernier paragraphe du post de stefan

je suis peut-être un peu "lourd" avec mes histoires de magic_quotes et de test des valeurs passées par les formulaires, mais je pense qu'un script dont le but est de gérer une boutique en ligne avec options de commande, paiement.... doit être un minimum sécurisé.... et la sécurité passe (à mon avis) d'abord par la maitrise de tout ce qui se passe.....

Last edited by jhr (27-07-2007 16:02:24)

Offline

#6 Re: magic_quote_gpc

(27-07-2007 22:58:34)


J'ai appliqué la modification de stefan sur le script admin/pre.php, mais cela plantait la gestion des caractéristiques car apparemment une variable de type array est passée en paramètre.
Pour corriger cela j'ai utilisé une fonction trouvée du fr.php.net et apparemment ça marche.

function addslashes_array($a){
        if(is_array($a)){
            foreach($a as $n=>$v){
                $b[$n]=addslashes_array($v);
            }
            return $b;
        }else{
            return addslashes($a);
        }
    }


	if (!get_magic_quotes_gpc()) {
		foreach ($_REQUEST as $key => $value) $$key = addslashes_array($value);                    
              }else{
              foreach ($_REQUEST as $key => $value) $$key = $value;
		}

Last edited by jhr (27-07-2007 22:59:18)

Offline

#7 Re: magic_quote_gpc

(18-09-2007 01:26:48)


Bonjour, cette discussion me semble intéressante car

1/ j'ai rencontré des problèmes avec l'usage des guillements et tinymce

2/ la sécurité me semble très importante dans un script e-commerce

Question pour jhr...

jhr wrote:

Pour corriger cela j'ai utilisé une fonction trouvée du fr.php.net et apparemment ça marche.

Où avez-vous utilisé cette fonction, dans quel contexte?

Last edited by gib (18-09-2007 01:28:37)

Offline

#8 Re: magic_quote_gpc

(18-09-2007 08:37:13)


Bonjour,
Nous avons deux problèmes différents :

1) Dans certaines versions de php, par exemple sous Easy PHP (PHP 4.3.10) il n'est pas possible de modifier la description d'un produit, ni d'y introduire des balises html et les styles correspondants. J'ai trouvé un solution que j'ai présentée (incomplètement) sur le forum voir le post déjà cité et la discussion qui le précède:
http://forum.thelia.fr/viewtopic.php?pid=1732#p1732

2) l'utilisation de l'instruction "foreach($_POST as $key ...." laisse la porte ouverte à des injections sql comme l'a expliqué stefan qui a proposé un remède classique à ce problème, mais qui ne fonctionne pas quand $value est un tableau (array).
J'ai trouvé dans les "Users Contibuted Notes" de la fonction addslashes une solution à ce problème que j'ai présentée plus haut dans cette discussion et qui fonctionne sans problème sur un site Thelia 1.3.1 en développement.
Ces fonctions devraient être utlisés dans chaque script ou les superglobales $_POST, $_GET ou $_REQUEST sont utilisées et en particulier dans admin/pre.php (voir ci-dessous) et fonctions/moteur.php

<?php
	//foreach ($_POST as $key => $value) $$key = $value;
	//foreach ($_GET as $key => $value) $$key = $value;
	
	function addslashes_array($a){
        if(is_array($a)){
            foreach($a as $n=>$v){
                $b[$n]=addslashes_array($v);
            }
            return $b;
        }else{
            return addslashes($a);
        }
    }


	if (!get_magic_quotes_gpc()) {
		foreach ($_REQUEST as $key => $value) $$key = addslashes_array($value);                    
              }else{
              foreach ($_REQUEST as $key => $value) $$key = $value;
		}
	
?>

Bon, je sais la fonction "addslashes_array" devrait être installée dans le fichier fonctions/divers.php !

J'essaye d'approfondir la question (je viens d'acheter le livre de D.Seguy et P. Gamache "Sécurité PHP5 et MySQL" mais je trouve que  dans ce livre comme dans les sites internet que j'ai consultés, on écrit "ATTENTION DANGER" mais on  écrit très rarement comment l'éviter !

Je regrette un peu le silence de l'aministratreur du forum sur ce sujet !

  • yoan
  • Cofondateur Thelia

Offline

#9 Re: magic_quote_gpc

(18-09-2007 08:51:34)


Heu oui smile

Je suis plutôt occupé en ce moment, c'est pas tjs simple de répondre.
Il est clair qu'il faut bannir le foreach là dessus.

Pourquoi ne pas configurer correctement son php.ini voir ajouter un .htaccess pour changer la conf si on a pas accès au php.ini ?


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x