Malcolm Beck´s: Frage zu Prepared Statement

Beitrag lesen

hi,

Perl kann ich nicht verwenden, also ich, mein Server schon, wäre mir aber auch zu kompliziert, jetzt noch Perl mit ins Spiel zu bringen.
Wer sagt denn "auch"? "Nur"! ;-)

Hatte ich in China schon halb durch, nur, nach meiner Rückreise verfiel leider dem einfacheren PHP, Perl ist für's Web einfach zu kompliziert (oder für mich) :)

Soll heißen:

#!/usr/bin/perl -T -w
use strict;
use CGI qw(param);
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # "böse" Environment-Variablen, alle tainted, bis sie beseitigt wurden
$ENV{'PATH'}='/bin:/usr/bin'; # $ENV{'PATH'} ist normalerweise tainted, jetzt nicht mehr. Konstanten im Script sind nicht tainted.
my $app=param('app');

$app ist tainted, da aus $ENV oder STDIN abgeleitet

$app=~m|^(/usr/safe-for-web/bin/[a-z]{3,8})$| or die "Hack mich nicht!";
$app=$1; # $1 ist der Match innerhalb der Klammern, und per Definition untainted. Ohne diese Zeile bleibt $app tainted und exec stirbt.
exec $app; # stirbt nicht, da Environment und alle Parameter untainted sind

Dafür kann das Script nur Programme in /usr/safe-for-web/bin ausführen, deren Name aus drei bis acht Kleinbuchstaben besteht.

  
Danke für das Beispiel, ich hoffe, irgendwann lerne ich auch mal eine anständige Programmiersprache[1] :)  
  
mfg  
[1] Das ich damit nichts anfangen kann, brauch ich ja nicht erwähnen, auch, wenn mir der ein oder andere Begriff bekannt vorkommt :)

-- 
[I have a Dream...](http://www.myvideo.de/watch/2503116/I_have_a_dream_Will_I_AM_feat_Common)