Schrift
[thread]7926[/thread]

Reguläre Ausdrücke (Seite 2)

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
tribbiani
 2006-05-03 12:18
#65357 #65357
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
Sorry, ich war einige Tage nicht da, aber zu dem Problem:

Ich lese config files mit einem parser module aus und für den Benutzer ist es vielleicht einfacher den search und replace Teil nicht in 4 Variablen ($controller/$regexp/$replace_string/$option) zu splitten, sondern das ganze ungefähr so zu schreiben:
Code: (dl )
SR=REGEXP($SAMPLERATE,"s/...$//")   # converts '44100' --> '44'

Für Tipps bin ich aber immer offen :)

Gruß
tribbiani
Dubu
 2006-05-03 14:34
#65358 #65358
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Okay, das klingt wie eine vernünftige Anwendung des eval(), aber auch nur dann, wenn Config-Datei und Programm vom gleichen Benutzer erstellt bzw. ausgeführt werden, d.h. immer sichergestellt ist, dass Benutzer und Skript die gleichen Rechte haben (also z.B. keine Anwendung als CGI-Skript). Du erlaubst dem Benutzer mit dem eval() nämlich erstmal, beliebigen Perl-Code auszuführen.

Du kannst dir vielleicht vorstellen, was der folgende Eintrag in der Config-Datei anrichtet:
(ACHTUNG! Dies NICHT ausprobieren!):
SR=REGEXP($SAMPLERATE,"s///; unlink glob '/*/*' ")
tribbiani
 2006-05-03 15:49
#65359 #65359
User since
2006-01-27
17 Artikel
BenutzerIn
[default_avatar]
Jetzt verstehe ich es noch besser wieso man eval lieber nicht benutzen sollte.

Nochmals danke für die Hilfe und die Tipps, dieses Forum ist echt Klasse!

Grüsse
tribbiani
bloonix
 2006-05-03 17:45
#65360 #65360
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Dubu,03.05.2006, 12:34](ACHTUNG! Dies NICHT ausprobieren!):
SR=REGEXP($SAMPLERATE,"s///; unlink glob '/*/*' ")[/quote]
Vielleicht könnte man vorher prüfen, wie sicher das Ganze ist...
(ich kenne mich allerdings nicht so gut aus mit reval)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use warnings;
use strict;
use Safe;

my $string = 48000;
my $regex = 's/...$//; unlink glob "/*/*";';

my $sandbox = new Safe;
$sandbox->reval($regex);
die "Unsecure regex: $@" if $@;

eval("\$string =~ $regex;");

print "STRING: $string\n";


Ausgabe:

Unsecure regex: 'glob' trapped by operation mask at (eval 2) line 1.

Dennoch ist Dubu's und docsynders Vorschlag vorzuziehen.\n\n

<!--EDIT|opi|1146664142-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2006-04-26 15:40.