Code-Befehl mit regular expressions ausführen
mrx
- php
0 Beat
Hallo!
Ich habe einen String in einer Datenbank, in der ich alle PHP-Befehle innerhalb ...
per PHP ausführen.
So hab ich es versucht:
$absatz="[cod]echo 'hallo';[/cod]";
$absatz = preg_replace("!\[cod\](.*)\[/cod\]!","$1",$absatz);
So gelingt es mir zwar die Codezeilen rauszubekommen, aber jetzt sollten die noch ausgeführt werden.
Könnt ihr mir helfen, wie ich das machen kann?
Ich muss zugeben, dass das Script jetzt noch nicht wirklich sicherheitsoptimiert ist, aber ich will erst mal wissen, wie es machbar ist.
Thomas
Könnt ihr mir helfen, wie ich das machen kann?
In Perl gibt es die Syntax s///e
es ist der Switch /e der einen Eval-Block um die rechte Seite der Expression setzt.
Ditto gibt es in PHP
preg_replace("/(x)/e","some_func($1)")
Das ist bei PHP allerdings verwirrend, denn /e gehört ja zum zu ersetzenden evaluierenden Pattern.
Ich muss zugeben, dass das Script jetzt noch nicht wirklich sicherheitsoptimiert ist, aber ich will erst mal wissen, wie es machbar ist.
Im Zusammenhang mit eval gibt es tatsächlich zu bedenken:
Perl
"suchtext"=~ s/($userword)/somefunc($1)/e;
Hier kann noch nichts passieren, aber was, wenn ich einen doppelten eval Block verwende?
"suchtext"=~ s/($userinput)/somefunc($1)/ee;
Hier darf ich schon mal meinen Server neu aufsetzen. Denn der vom user gelieferte ausdruck wird evaluiert.
Das Verhalten in PHP soltest du unbedingt recherchieren.
mfg Beat