Позволяет ли пользователю добавлять любой код в TWIG дыру в безопасности? - PullRequest
0 голосов
/ 12 июня 2018

В моем приложении я хочу разрешить пользователю добавлять свой собственный код Twig.Но я не хочу, чтобы он выполнял какой-либо внутренний код (например, PHP-код для получения доступа к базе данных или файлам).Я проверил, используя php код <?php print "hello"; ?>.Я вижу, что код PHP не выполняется на странице Twig.

Насколько я знаю, я могу сказать, что нет способа выполнить код PHP (который может манипулировать файлами или базой данных) в файле Twig, если не вызывать расширение.

Но я просто хочу знать больше советов.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Просто будьте осторожны, если какой-либо из ваших параметров контекста (параметры, которые вы используете для визуализации шаблона) являются объектами, которые реализуют интерфейс ArrayAccess - в некоторых случаях они могут обойти политики свойств / методов в вашей песочницепотому что Twig обращается с ними как с массивами.Например, попробуйте передать модель Eloquent, и вы заметите, что вы можете легко получить доступ к свойствам и отношениям (и, возможно, даже сможете выполнять методы запросов!), Несмотря на 100% строгую политику безопасности.

0 голосов
/ 12 июня 2018

Вы можете взглянуть на расширение песочницы ветки.Вы можете установить политику и явно определить каждый отдельный тег, фильтр, метод, свойство и функцию.Это был совет, который я получил после прохождения моего приложения через тест на проникновение в систему безопасности.Вы можете настроить его глобально или внутри вашего контроллера, который отображает пользовательский твиг-ввод.

https://twig.symfony.com/doc/2.x/tags/sandbox.html

https://twig.symfony.com/doc/2.x/api.html#sandbox-extension

/**
 * Adds sandbox limitations to twig-environment to prevent template-injections
 *
 * @return \Twig_Environment
 */
private function getSandboxedTwigEnvironment()
{
    $tags = array('if', 'include', 'import', 'block', 'set', 'for');
    $filters = array('date', 'escape', 'trans', 'split', 'length', 'slice', 'lower', 'raw');
    $methods = array();
    $properties = array();
    $functions = array('include', 'path', 'absolute_url', 'asset', 'is_granted');

    $policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);
    $sandbox = new Twig_Extension_Sandbox($policy);

    $twigEnvironment = $this->getCentralService()->getTwigEnvironment();
    $twigEnvironment->addExtension($sandbox);

    return $twigEnvironment;
}

Исключение составляет Twig_Sandbox_SecurityError будет выдано, если какие-либо запрещенные теги, фильтр и т. Д. Были добавлены к пользовательскому вводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...