2014-12-03 2 views
0

Используя класс Kohana View, я хочу, чтобы пользователи-администраторы могли редактировать HTML-шаблоны, и самый простой способ сделать это - позволить им редактировать файл шаблона напрямую, то есть загружать его в текстовое поле и сохранять файл в submit.Как создать редактируемый шаблон PHP/HTML без риска для безопасности?

Но вредоносный пользователь может потенциально написать PHP-код внутри этого текстового поля и вызвать статические функции, которые могут вызвать вредоносное поведение. Как я могу ограничить PHP только оценивать простые переменные в этом редактируемом шаблоне и запрещать вызовы функций и другие типы логики?

Пример: вид/template.php

Hey $firstname, 

Best regards, 
$admin 

ответ

2

Не разобрать PHP. Прочитайте его в строке с использованием file_get_contents и выполните str_replace со списком известных переменных.

например.

$replace = array(
    '$firstname' => $firstname, 
    '$admin' => $admin 
); 
$template = file_get_contents('view/template.php'); 
$template = str_replace(array_keys($replace), array_values($replace), $template); 

Это, очевидно, становится все более сложным, если вы хотите, чтобы позволить им сделать что-нибудь более продвинутое, чем ваш пример, но это то, что такие вещи, как smarty для.

+0

Мне нравится ваш ответ, но это означает, что я не могу использовать мою внутреннюю структуру: http://kohanaframework.org/3.0/guide/kohana/mvc/views#views для этой конкретной функции – allenylzhou

+0

Это не совсем так. Вы все равно можете использовать представления, это просто закончится как переменная, которую вы передадите родительскому шаблону. В любом случае вы будете иметь все переменные рядом с этим в контроллере. Другим вариантом может быть анализ (а не включение) Kohana :: find_file из родительского шаблона, но я не думаю, что это подходящее место – rjdown

0

Другой вариант - использовать некоторые шаблоны для двигателя, такие как mustache.