Commande système et échappement de guillemets

ViPHP
ViPHP | 4674 Messages

03 juin 2007, 15:26

Bonjour :)

Je travaille actuellement sur un package XSLT. Plus exactement, c'est juste un gestionnaire des différents processeurs XSLT existants : Sablotron, DomXML, et XSLTProc.

Dans le cas de XSLTProc, on doit faire exécuter par PHP la commande suivante :

Code : Tout sélectionner

/usr/bin/xsltproc -o --param prmA "'str1'" prmB "'str2'" file.xml xslt.xsl out.html 2>&1
J'ai essayé de prendre un exemple assez complet.

Le problème que je rencontre concerne les paramètres.

Comme vous pouvez le remarquer, les paramètres sont de la forme :

Code : Tout sélectionner

nomDuParamètre "'valeurDuParamètre'"
La valeur du paramètre est entre doubles et simples guillemets.

Dans mon premier exemple, les valeurs sont str1 et str2.
Mais si on mettait un simple ou un double guillemet, on aurait une erreur.

L'utilisation des commandes escapeshellarg, et escapeshellcmd doivent sécuriser la commande a exécuter. Bien. Mais je remarque que ça supprime tout simplement les guillemets.

Comment protéger cette chaîne ? Est-ce que je dois juste utiliser addslashes, puis appliquer escapeshellarg et/ou escapeshellcmd ?
En fait j'en ai aucune idée, j'aimerais un peu d'aide à ce sujet :)

Merci pour votre temps, et bonne journée.
Modifié en dernier par Hywan le 04 juin 2007, 09:57, modifié 2 fois.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

03 juin 2007, 18:34

Voilà ce que donne mes tests :

Code : Tout sélectionner

18:30:59 naholyr ~$ cat test-escape.php <?php echo escapeshellarg('prmA "\'str1\'"'); ?> 18:31:06 naholyr ~$ php test-escape.php 'prmA "'\''str1'\''"' 18:31:18 naholyr ~$ echo 'prmA "'\''str1'\''"' prmA "'arg'"
Ça m'a l'air plutôt OK ?

Bien sûr ton argument c'est tout ce qui suit le --param, pas juste ce qu'il y a entre quotes, sinon l'utilisation d'escapeshellarg n'a plus de sens.

ViPHP
ViPHP | 4674 Messages

04 juin 2007, 09:54

Hmm ok pas évident au premier abord.
Merci pour le test :)

Problème résolu.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).