Richard Voß: CGI / Perl auf Sicherheit testen

Beitrag lesen

use CGI;
$q = new CGI;
$value = $q->param('foo');
print $value;
$value;

^^^^^^^

hättest du Warnungen aktiviert, bekämst du hier eine Warnung "Useless use of a variable in void context ...". Bitte, beginne deine Programme mit "use strict; use warnings;"!

Perl ist nämlich keine Shell. Das einfach platzieren von $value bewirkt nicht, dass deren Inhalt ausgeführt wird. In dem Fall hättest du eine Sicherheitslücke.

Folgendes Programm ist sicherheitskritisch und darf NIEMALS auf einem Webserver liegen!

#!/usr/bin/perl
use strict;
use warnings;
use CGI qw/:standard/;

exec param('exec');
__END__

Aufruf:
$ perl tt.pl "exec=echo Sicherheitslücke"

Lies also perldoc warnings, perldoc strict, und unbedingt perldoc perlsec!