Thread Wie man Regexe NICHT verwenden sollte!
(8 answers)
Opened by GwenDragon at 2012-02-23 13:14
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 [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. 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) |