opi: Taint: insecure ...

Beitrag lesen

Guten Morgen Alain,

morgen,

my $cmd = "@ARGV";

würde
$ENV{"PATH"} = "";

system "$cmd";

das taint problem nicht grundsätzlich so gelöst?

Nicht ganz. Zunächst einmal müsste der Pfad mit einfachen Anführungszeichen gesetzt werden. Etwa so:

$ENV{PATH} = '';

Dies nützt dir aber nur etwas, wenn der Aufruf nicht von ausherhalb kommt. Beispiel:

my $cmd = "ps -ef";
system "$cmd";

Wenn das Kommando allerdings von Ausserhalb eingelesen wird, wie zum Beispiel:

my $cmd = "@ARGV";
system "$cmd";

dann bleibt $cmd tainted.

Eine einfache Möglichkeit, dies zu untainten, hat, so glaube ich, Siechfred schon erklärt.

if ( /^([-@\w.]+)$/ ) {
   $cmd = $1;
}
else {
   die "Argument ist tainted!\n";
}

system "$cmd";

jetzt funktioniert es.

Ich hoffe, dass ich es so gut erklärt habe, wie ich es auch selber verstanden habe.

Bis dann.

Greez,
opi

--
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|