Как ограничить доступ к ненадежному коду в Twig include с функцией песочницы - PullRequest
0 голосов
/ 22 января 2020

Как и ожидалось, я могу получить доступ к функциям, не включенным в список.

Конфигурация политики:

$policy = new \Twig\Sandbox\SecurityPolicy(); // should disallow all
$sandbox = new \Twig\Extension\SandboxExtension($policy);
$twig->addExtension($sandbox);

Шаблон веточки:

{{ include(template_from_string(data), sandboxed=true) }}

где data содержит ограниченный внешний код:


{% if totalAmount %}
    total: {{ totalAmount|number_format }}
{% endif %}

Поскольку я понимаю не очень подробные документы, у меня не должно быть доступа ни к , если , totalAmount и number_format . Как это ограничить?

1 Ответ

0 голосов
/ 22 января 2020

Чтобы включить режим глобальной песочницы, вам нужно передать true в качестве второго аргумента конструктора SandboxExtension, в противном случае вам нужно будет использовать тег {% sandbox %} в тех местах, где вы не доверяете код, который запускается.

$policy = new \Twig\Sandbox\SecurityPolicy();
$sandbox = new \Twig\Extension\SandboxExtension($policy, true);
$twig->addExtension($sandbox);

{% sandbox %}
    {% include(template_from_string(data) %}
{% endsandbox %}
...