Thread Wie man Regexe NICHT verwenden sollte! (8 answers)
Opened by GwenDragon at 2012-02-23 13:14

GwenDragon
 2012-02-23 13:14
#156348 #156348
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
Ich und ihr könnt hier mal ein paar Beispiele für Regexe posten, die eine Falle werden können.

Ein Beispiel, das in einer Webanwendung (Download-CGI) lief und auch bei normalen URLs klappte.

gekürzt:
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
#!/usr/bin/perl -w

my $dir = "/var/www/mydom.de/htdcos";

use CGI qw/:all/;

my $p = path_info;

$filename= "$dir/$p";


# weiterer Code
#....
#....
#...
# mach irgendwas mit $filename
#...
#......

$res = "";
if ($filename =~ m{$p\.png}) { # is PNG
         $res = "OK";
} else {
         $res = "NOT OK!!!";
}

print header;
print "Upload is ", $res;


Alles klar, denken manche. Sieht doch normal aus.

Aber wehe die URL wird als http://example.org/cgi-bin/dl.pl/..++++a.png oder http://example.org/cgi-bin/dl.pl/a[].png aufgerufen, dann kracht es wie ein Serverlog zeigte:
Code: (dl )
1
2
[Thu Feb 13 11:01:30 2012] [error] [client 127.0.0.1] Nested quantifiers in regex; marked by <-- HERE in m//..+++ <-- HERE +a.png\\.png/ at dl.pl line 18.
[Thu Feb 13 11:01:30 2012] [error] [client 127.0.0.1] Premature end of script headers: dl.pl

Und der Server nörgelt mit einem 500er. Logisch.

Dabei wäre es einfach gewesen, das Regex so zu verwenden:
Code (perl): (dl )
if ($filename =~ m{\Q$p\E\.png}) { # is PNG


Wenn ihr auch so ein paar Fallen habt, nur auch posten. Dann stürzen die nächsten Anfänger nicht drüber. ;)

//EDIT: Vielleicht auch gut, das ins Wiki zu setzen? Falls sowas nicht schon vorhanden ist.
Last edited: 2012-02-23 13:22:51 +0100 (CET)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

View full thread Wie man Regexe NICHT verwenden sollte!