Re: perlsec à l'aide

Page principale

Répondre à ce message
Auteur: Edgar Bonet
Date:  
À: Liste Guilde
Sujet: 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>;

-- 
Edgar Bonet           Maison : 04 76 21 29 16    Bureau : 04 76 88 10 96
3 rue Jean Prévost    Mobile : 06 77 19 79 39    Fax    : 04 76 88 11 91
38000 Grenoble        guilde@???     www.edgar-bonet.org