Thread Kleine Sprache parsen (16 answers)
Opened by KCobain at 2011-11-08 16:43

GwenDragon
 2011-11-08 17:08
#154024 #154024
User since
2005-01-17
14760 Artikel
Admin1
[Homepage]
user image
Schnippsel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
sub DRUCKE {
  eval "print @_";
}

my $line = 'DRUCKE 9*2';
my ($befehl,@argumente) = split / /,$line;

no strict;
&{$befehl}(@argumente);


Aber Vorsicht!
Du solltest genau prüfen, was in $befehl und @argumente drin steht.
Ungeprüfte eval sind gefährlich.

Denn wenn anstatt
Code (perl): (dl )
$line = "DRUCKE 9*2";

dann unter Windows
Code (perl): (dl )
$line = 'DRUCKE `type X:\\\tmp\\\passwd`';

oder Linux
Code (perl): (dl )
$line = 'DRUCKE `cat /etc/passwd`'; 
verwendet wird, hast du eine schönes Sicherheitsproblem.



Und selbst dein programm kann so ausgegeben werden:
Code (perl): (dl )
$line = 'DRUCKE `type "$0"`';

bzw.
Code (perl): (dl )
$line = 'DRUCKE `cat "$0"`';



Du musst selbst definieren, was als Argumenet erlaubt ist udn das notfalls mit Regex matchen.

Editiert von GwenDragon: Hinweis auf Sicherheit mit Beispielen
Last edited: 2011-11-08 17:29:37 +0100 (CET)

View full thread Kleine Sprache parsen