Thread Sicherheit von @ARGV (43 answers)
Opened by bianca at 2020-01-15 18:01

Linuxer
 2020-01-20 22:30
#191163 #191163
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Die Regex muss das abdecken, was im jeweiligen Anwendungsfall korrekt sein soll.

Wenn Du einen Pfad hast, der nur aus Buchstaben, Zahlen und "/" bestehen kann, dann muss der Regex das einfangen können.

Und ich würde in diesem Fall nicht erst $classfile verarbeiten, sondern vorher schon $class sauber machen.

Beispiel:

Foo/Bar.pm (1.5kb):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
package Foo::Bar;
use strict;
use warnings;
use 5.010;

our $VERSION = "47.11";

1;

__END__



test_taint.pl (4.5kb):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#! /usr/bin/perl -T -I.
use strict;
use warnings;

use 5.020;
#use Getopt::Long;

my $class = shift // die "Bitte Klasse angeben.\n";

# $class is tainted; so untaint it
if ( $class =~ m|^([a-z0-9]+(?:::[a-z0-9]+)*)$|i ) {
    $class = $1;
}
else {
    die "'untaint' fehlgeschlagen.\n";
}

( my $classfile = $class . ".pm" ) =~ s|::|/|g;



require "$classfile";

say $class->VERSION;

__END__



Code: (dl )
1
2
3
4
5
6
7
$ perl -T test_taint.pl Foo::Bar
47.11

$ perl -T test_taint.pl Foo::..::Bar
'untaint' fehlgeschlagen.

$
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Sicherheit von @ARGV