Leser: 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use warnings; use strict; my $file = 'addressbook.ldif'; print "Eingabe Name : "; my $regex = <>; chomp( $regex ); $regex = qr/$regex/i; open( my $fh, '<', $file ) or die $!; while( <$fh> ) { print if /$regex/; }
$a=~s/a/$b[tuwas()]/
2009-03-10T15:31:29 LanXUPDATE: konkret, wenn perl während der Variableninterpolation auf ein Hash oder Array zugreift, evaluiert er den Index.
[...]
Die Frage ist ob die Variableninterpolation stattfindet, bei qr// wär ich vorsichtig...
2009-03-10T15:31:29 LanXNee, AFAIR kann in die Variableninterpolation code eingeschmuggelt werden
2009-03-10T15:54:46 LanXich denke ich hab dem Fragesteller schon genug geholfen...
(?{ code })
QuoteEval-group not allowed at runtime, use re 'eval' in regex ...
QuoteFor reasons of security, this construct is
forbidden if the regular expression involves
run-time interpolation of variables, unless the
perilous ""use re 'eval'"" pragma has been used
(see re), or the variables contain results of
""qr//"" operator (see ""qr/STRING/imosx"" in
perlop).
This restriction is because of the wide-spread and
remarkably convenient custom of using run-time
determined strings as patterns. For example:
$re = <>;
chomp $re;
$string =~ /$re/;
2009-03-11T11:43:55 LanXQuoteEval-group not allowed at runtime, use re 'eval' in regex ...
2009-03-11T12:49:44 pqich behaupte, wenn man damit code einschmuggeln kann, ist es ein bug.
Guest guestDamit habe ich zuerst versucht, mein Skript sicherer zu machen, aber da ich hier Richtung Entwarnung herausgehört habe, habe ich es wieder herausgenommen, zumal es nicht sehr elegant aussieht.
if ( $regex =~ /[$@&{[(*+#]/ ) {
print "Nicht erlaubte Zeichen\n";
exit 1;
}
2009-03-10T21:44:23 LanXumgekehrt wär eleganter und einfacher (und sicherer)
if ( /\A[^\n]*(\s|=)$regex/m and /^mobile:\s\+*\d+/m ) {
if ( /\A[^\n]*(\s|=)$regex/m and /^mobile:\s\+?\d+/m ) {