carfax
Guest
шаблоны с php-кодом: как обезопасить
Условия задачи:
Есть движок, использующий в качестве шаблонов php-шные файлы, которые подцепляются include'ами там, где надо. То есть, шаблон может содержать php-код, который будет исполняться при подключении шаблона.
Все хорошо до тех пор, пока сайтом пользуюсь только я сам, поскольку я "царь и бог" на своем сайте и хостинге - все пароли и прочую секретную информацию я и так знаю.
Проблемы возникают тогда, когда надо дать возможность постороннему человеку (дизайнеру) править шаблоны через веб интерфейс движка. Надо каким-то образом сделать так, чтобы дизайнер мог вставлять в шаблоны переменные (<?=$var1?>) и какой-то простой код, но при этом не мог использовать потенциально опасные функции, открывающие файлы или ползущие в базу без спроса.
Исходим из предположения, что дизайнер может быть злоумышленником, хорошо шарящим в php.
Пока, мне пришло в голову только одно: грубо вычишать шаблон от опасных функций перед сохранением файла на диск.
Примерно так:
Какие еще могут быть варианты?
Использовать smarty и т. п. не предлагать.
Условия задачи:
Есть движок, использующий в качестве шаблонов php-шные файлы, которые подцепляются include'ами там, где надо. То есть, шаблон может содержать php-код, который будет исполняться при подключении шаблона.
Все хорошо до тех пор, пока сайтом пользуюсь только я сам, поскольку я "царь и бог" на своем сайте и хостинге - все пароли и прочую секретную информацию я и так знаю.
Проблемы возникают тогда, когда надо дать возможность постороннему человеку (дизайнеру) править шаблоны через веб интерфейс движка. Надо каким-то образом сделать так, чтобы дизайнер мог вставлять в шаблоны переменные (<?=$var1?>) и какой-то простой код, но при этом не мог использовать потенциально опасные функции, открывающие файлы или ползущие в базу без спроса.
Исходим из предположения, что дизайнер может быть злоумышленником, хорошо шарящим в php.
Пока, мне пришло в голову только одно: грубо вычишать шаблон от опасных функций перед сохранением файла на диск.
Примерно так:
PHP:
$template=str_replace("mysql_fetch_array", "censored", $template);
Использовать smarty и т. п. не предлагать.