Re: perlsec à l'aide

Page principale

Répondre à ce message
Auteur: anne aublanc
Date:  
À: Liste Guilde
Sujet: Re: perlsec à l'aide

----- Original Message -----
From: "Edgar Bonet" <guilde@???>
To: "Liste Guilde" <guilde@???>
Sent: Tuesday, January 25, 2005 11:02 AM
Subject: Re: perlsec à l'aide


| Le mardi 25 janvier, anne aublanc a écrit :
| > J'essaie de mettre tous mes pgms perl avec l'option -T.
| >
| > dans perlsec :
| > open(FOO,"echo $arg|");     # Pas Ok, mais...
| > open(FOO,"-|")  or exec 'echo', $arg;   # Ok
| >
| > J'ai une ligne du style
| > open(FOO,"$cde $arg 2>&1 |");   #  cde 1
| >
| > Je n'arrive pas à la transformer en
| > open(FOO,"-|")  or exec $cde, $arg;
| > Je ne sais pas où mettre le 2>&1

|
| Ne la transforme pas, elle est très bien comme elle est. Le but de
| l'option -T n'est pas de te faire faire des contorsions syntaxiques,
| mais de t'inciter à nettoyer tes variables. Dans ton cas il faut
| nettoyer $cde, $arg et l'environnement ($ENV{PATH} et $ENV{IFS} au
| moins). Regarde l'exemple ci-dessous :

|
| #!/usr/bin/perl -T

|
| # $cde est propre : ça vient de ton programme
| $cde = "echo";

|
| # $arg est sale car il vient de l'utilisateur
| $arg = shift;

|
| # Nettoyons $arg
| unless ($arg =~ /^(\w+)$/) { die "Argument non conforme\n"; }
| $arg = $1;

|
| # Environnement propre, sinon on aurait « Insecure $ENV... »
| %ENV = {"PATH" => "/bin:/usr/bin"};

|
| # Maintenant c'est OK
| open(FOO,"$cde $arg 2>&1 |");

|
| # La preuve :
| print while <FOO>;

|

grrrr...
J'ai ajouté %ENV = {"PATH" => "mon path"};
et c'est ok!
Je l'avais mis au départ, je devais avoir un autre bug car je n'avais pas le
fameux msg : Insecure $ENV{PATH} !!!!
J'avais le msg "Insecure dependency...." donc j'avais complètement
transformé le pgm petit à petit!
Comme tu le dis si bien : Le but de l'option -T n'est pas de te faire faire
des contorsions syntaxiques...

Cela me faisait cette impression!

J'ai plusieurs questions...
J'ai réussi à faire fonctionner les pgms mais 1 ligne c'est transformé en x
lignes (quelques dizaines!) :

system "$g3topbm -f $fax_directory/$sfilename | $pnmtops >
$webtmpabs/$$.f.$tfilename.ps"; # (1)
cette ligne transforme un fichier g3 (fax) en ps en passant par un fichier
pbm

J'ai donc transformé cette ligne avec :
# g3 => pbm
    open(LIRE,"-|") or exec ($g3topbm, "-f", "$fax_directory/$sfilename") or 
die (print "<br> impossible d'exécuter $g3topbm $fax_directory/$sfilename 
<br>\n");
    sysopen(AJOUT, "$webtmpabs/$aleat1.f.$tfilename.pbm", 
O_WRONLY|O_EXCL|O_CREAT ) or die (print "<br> pbm NON créé dans 
$webtmpabs/$aleat1.f.$tfilename.pbm <br>\n");
    while (<LIRE>)
    {
        print AJOUT $_;
    }
    close AJOUT;
    close LIRE;


ect... (pbm => ps)

ma question : est-ce-que j'aurais pu continuer  la cde 1...
Selon perlsec :
system "echo $arg";         # Non sûr
system "/bin/echo", $arg;   # Sûr (n'utilise pas sh)


J'ai décortiqué la cde (1) en 2 cdes pour ne plus avoir le pipe
J'ai essayé :
system ("$g3topbm" "$fax_directory/$sfilename" >
$webtmpabs/$$.n.$tfilename.pbm );
system ("$g3topbm", "$fax_directory/$sfilename" >
$webtmpabs/$$.n.$tfilename.pbm );

J'ai fait beaucoup d'essais mais sans succès! ;o((
Insecure dependency in system avec cde (1)
syntax error....

Comment utiliser la cde system ou exec avec plusieurs paramètres ... des
pipes...
Comment faire des pipes : |
Comment écrire la sortie d'une cde dans un fichier

merci
anne