Ich würde gern einige Anregungen haben wollen.
Hier ist ein Beispielskript einer Template-Engine, die ein Template auf if-endif Platzhalter analysiert und diesen dann mit richtigen PHP Code ersetzt und über eval() ausgibt. Gibt es Sicherheitsprobleme in dieser hier erstellten Fassung, wenn im Template bereits richtiger PHP Code abgefangen wird?
Template Datei: file.txt
Hier ist ein Beispielskript einer Template-Engine, die ein Template auf if-endif Platzhalter analysiert und diesen dann mit richtigen PHP Code ersetzt und über eval() ausgibt. Gibt es Sicherheitsprobleme in dieser hier erstellten Fassung, wenn im Template bereits richtiger PHP Code abgefangen wird?
PHP:
<?php
class Template{
function parse($file){
// remove given php code in template file
$file = preg_replace('/^<\?php(.*)(\?>)?$/s', '$1', $file);
// if condition of template engine
$ifCond = '/\{if (.*?)\}(.*?)\{\/(endif)\}/ise';
if(preg_match($ifCond,$file,$result)){
$beginIf = $result[1];
$content = $result[2];
$endIf = $result[3];
return $this->conditionIf($beginIf,$content,$endIf);
}
}
function conditionIf($beginIf,$content,$endIf) {
$output = "<?php if($beginIf) { echo \"$content\";};?>";
return $output;
}
}
$file = file_get_contents('file.txt');
$tmpl = new Template();
$content = $tmpl->parse($file);
$check = 1;
$content = "?> ".$content;
ob_start();
eval($content);
$content = ob_get_contents();
?>
Template Datei: file.txt
PHP:
{if $check==1}
Hallo mein IF.
{/endif}