Eine func in $var nicht ausführen...

Sebigf

Erfahrenes Mitglied
Hallo zusammen,

ich habe hier ein kleines "komisches" Problem.
Ich habe eine sys.php Datei, wo sich einige Variablen befinden.

Ich möchte diese Variable anbieten, aber nicht auführen lassen...

PHP:
$var = func_huhu('wert');

Ich möchte dem System die $var zur verfügung stellen, sodass sie bei verwendung in den Templates usw ausgeführt werden kann.

sys.php wird mit require() eingefügt, sodass sie zur verfügung steht.
Das Problem bei dem ganzen ist, dass in der Funktion eine INSERT - Querys (SQL) ist. Sodass immer direkt alles eingefügt wird, sobald ich eine Seite aufrufen möchte.

Ich hoffe mir kann da einer helfen...

Danke
 
Variable setzen:
PHP:
$var="func('bla');"
Variable ausfuehren:
PHP:
eval($var);
Mit eval() musst Du aber verdammt vorsichtig sein in Sachen Code-Injection.
 
Dennis Wronka hat gesagt.:
Mit eval() musst Du aber verdammt vorsichtig sein in Sachen Code-Injection.

Warum?

Gibt es keinen anderen Weg ? Ich habe es probiert und es geht leider nicht...
Du musst wissen, ich arbeite schon länger mit meinem Template-System.

PHP:
        eval("\$file = \"".addslashes(tpl("test"))."\";");
        $echo stripslashes($file);

Aber selbst wenn ich die $var in tpl("test") gespeichert habe, wird es nicht ausgeführt, obwohl es auch durch eval() läuft...
 
Wieso nicht gleich:
PHP:
echo stripslashes(tpl("test"));
Ich glaube, ich habe dich auf so etwas schon mehrmals aufmerksam gemacht.
 
Weil es Variablen gibt, die in diesen Templates ausgewertet werden müssen. Diese setze ich mit {$var} in die HTML Zeilen. ;)

## Nachtrag

Vor der Funktion stehen einige Variablen... Diese benötige ich eben in den Templates ;)
 
Sebigf hat gesagt.:
Weil wenn z.B. Daten durch eval() gejagt werden die vom User kommen (z.B. per Eingabefeld, Cookie, Datebank) kann dort Code eingeschleust werden.
Nehmen wir mal an Du hast ein Eingabefeld namens text und willst einfach den Inhalt irgendwann ueber eval() ausgeben lassen (ich weiss, ist kein uebliches Beispiel, aber duerfte recht anschaulich sein).
PHP:
$output="echo $_POST['text'];";
Irgendwann willst Du dann $output ausfuehren, also per
PHP:
eval($output);
Jetzt hat der User aber folgendes eingegeben:
Code:
""; readfile('/etc/shadow')
Dann steht in Output folgendes:
Code:
echo ""; readfile{'/etc/shadow');
Dadurch wird dann durch echo nichts ausgegeben, und anschliessend (falls die noetigen Rechte vorhanden sind und diverse PHP-Einstellungen nichts dagegen habe) die Datei /etc/shadow ausgegeben, welche die Passwort-Hashes beinhaltet.
 
Wenn darin nur einfache Variablen enthalten sind, könntest du sie auch anders ersetzen, etwa mithilfe regulärer Ausdrücke. Andererseits ist es vielleicht sinnvoller, die zu ersetzenden Variablen in dem Template-System einzeln zu definieren.
 
Danke für eure Empfehlungen. Es ist gut zu wissen, was es für Lücken gibt.
Generell ist mir diese Projekt mit GET Auswertungen bewusst. Deswegen durchlaufen, wenn überhaupt einmal im Gebraucht, alle Variablen die selber gesetzt werden können, eine Prüfung bzw Filterung.

Die Sache mit der Func. ist wirklich ärgerlich... Ich überlege gerade an eine neue Lösung...
 
Das Templatesystem Smarty bietet zum Beispiel die Möglichkeit Funktionen im Parser zu registrieren und sie so in Templates verfügbar zu machen.

Du könntest das ja auch in deinem Templatesystem implementieren.

greetz
daddz
 
Zurück