Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте. Столкнулся с такой проблемой - если в файле шаблона набрать код
{{ include("../.env") }}
{{ exec('mkdir ./123') }}
то выведится все содержимое файла и создастся папка.
Есть какая-нибудь возможность запретить доступ из файлов шаблона к файлам фреймворка и разрешить только определенные функции?
Изменено Pr00f (23.08.2015 02:14:46)
Не в сети
Не в сети
Я понимаю, что это просто обертка. Но там ведь можно задать какие функции игнорировать при парсинге. Думал может есть готовое решение для этого.
Проблема в том, что я планирую предоставлять доступ к уже установленному и настроенному продукту на своем сервере (что-то вроде цмс), где клиенты могут загружать свои темы/шаблоны. include, например, запретить не получится, а при помощи него можно считать все исходники и файлы настроек.
Не в сети
Blade — это не ахти какой парсер, всё что он делает — просто заменяет {{ на <?php и т.п. (условно). Поэтому вы там можете писать любой код и делать в нём любые синтаксические ошибки, Blade это отлично проглотит, а у вас потом будет PHP Fatal Error.
- где клиенты могут загружать свои темы/шаблоны.
Если нужно фильтровать код — вам нужен другой парсер. В зависимости от требований его может быть проще написать самому (если не нужны @foreach и прочее). Причём если клиенты у вас не особо программисты, это может быть даже лучше, чем всякие Smarty.
Не в сети
Понял. Значит придется писать свой, на основе blade, так как он уже используется в проекте, а переписывать все шаблоны на другой - затратно.
Не в сети
Мне кажется вам лучше пересмотреть степень настраиваемости приложения. Одно дело — когда клиент может менять отдельно взятые части, это можно рассматривать как public API, которое нужно поддерживать от версии к версии, и другое — когда у вас менять можно любой шаблон, тогда это уже клиент-программист, и ему так же захочется менять классы и т.п. Соответственно, в первом варианте у вас может быть всё то же самое, как сейчас, но если клиент хочет заменить шаблон — вы не даёте ему всех возможностей PHP, Blade и пр., а только ограниченный функционал, который предусмотрен планом.
Короче говоря, у вас два шаблонизатора — стандартный Blade для системных (не изменённых) шаблонов и урезанный, для шаблонов, которые перезаписываются клиентом. Это намного проще в реализации и даст меньше путей обойти защиту, так как, например, в Blade можно вызывать безобидные функции типа strtolower — как вы их будете определять? А есть и непрямые вызовы — по имени функции и т.п. — это потребует глубокого разбора PHP с кучей подводных камней и ради такой простой задачи это явный перебор.
Не в сети
Клиенты не программисты, нужна возможность изменять полностью файл шаблона (заниматься этим будут в основном верстальщики), в шаблонах никакие функции не вызываются, кроме url и еще пары других (модель возвращает уже отформатированные данные).
В общем подумал и сменил шаблонизатор на twig. Там как раз есть то, что мне нужно. Спасибо за помощь.
Не в сети
Страницы 1