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

Linuxer
 2020-01-20 23:48
#191165 #191165
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Und woher kommt die Liste für use lib bei Dir? Ist das wirklich eine hart kodierte Liste in qw()? Oder wird da mit Hilfe von Modulen ein oder mehrere Pfade ermittelt?

Bei Verwendung des Taint-Modus muss man sich klar sein, das Module auch "tainted" Daten liefern können:

Z.B. ist $FindBin::Bin von Perldoc:FindBin tainted und sollte bei Nutzung gesäubert werden.
Oder die Rückgabe von Perldoc:Cwd::realpath() ist ebenfalls tainted.


Übungs-Beispiel für ein use lib mit Pfaden, die auf $FindBin::Bin basieren:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#! /usr/bin/perl -T
use strict;
use warnings;
use 5.020;

use FindBin;
use File::Spec;
use Cwd qw( realpath );
use Scalar::Util qw( tainted );

our @LIB_DIRS;
BEGIN {
    # build paths for different library directories
    # all are tainted because of $FindBin::Bin and realpath (which removes the /../ from the paths)
    # this script is located inside cgi-bin; and the lib directories are in parallel directories
    @LIB_DIRS = map { realpath(
        File::Spec->catdir( $FindBin::Bin, '..', $_ )
    ) } qw( lib perl5lib stay-tainted );

    # untaint dirs
    for ( @LIB_DIRS ) {
        if ( m|^([\w/]+)$|i ) {
            $_ = $1;
        }
        else {
            # better die here
            #die "$_ is an insecure path\n";
        }
    }
}


use lib @LIB_DIRS;

### check for tainted directories
say tainted($_). " $_"  for @INC;

# Now
#use MyModule1;
#use MyModule2;


more (191b):

Und? Die Stolperfalle schon beim Lesen entdeckt?
Ohne das die() schlüpft das "stay-tainted" durch und bleibt tainted; weil der Regex hier nicht zutrifft (das - fehlt).



Neue Erkenntnis von heute: Lesen und Verstehen bildet.
Ich habe die Fehlermeldung immer falsch gedeutet. Ich dachte, dass unter dem Schalter -T schon das use lib $tainted; fehlschlägt. Das funktioniert aber tadellos.

Erst ein folgendes use Module; zieht dann den Fehler der "Insecure Dependency...".
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