2014-09-04 3 views
2

Я использую Twig в моем проекте Symfony.Как включить autoescaping в Twig с помощью Symfony

Symfony должен включить autoescape by default. Однако он не делает этого по умолчанию, и после того, как я включу его вручную, он все равно не будет работать.

Я настроил Twig для автоматического удаления всех переменных.

Но это не фильтрует ничего. И HTML, и JavaScript не экранированы. Нет никакого пользовательского autoescape_service, и я не фильтрую переменные с |raw или { autoescape false }.

Я дважды проверил сгенерированную конфигурацию, чтобы убедиться, что значение не было перезаписано. В приложение/кэш/DEV/appDevDebugProjectContainer.xml под определение веточка службы аргументы заключаются в следующем:

<argument key="debug">true</argument> 
<argument key="strict_variables">false</argument> 
<argument key="cache">false</argument> 
<argument key="autoescape">true</argument> 
<argument key="exception_controller">twig.controller.exception:showAction</argument> 
<argument key="autoescape_service">null</argument> 
<argument key="autoescape_service_method">null</argument> 
<argument key="charset">UTF-8</argument> 

Есть еще один способ, который Twig переписывает вариант autoescape, что мне не хватает? Или как я могу заставить его включить?

+1

Что вы думаете? Шаблонные переменные? Функции расширения Twig? – lxg

+0

Переменные шаблона, объекты передаются в вид и часто свойства печатаются, например {{message.content}} – Waaghals

ответ

0

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

Во время разработки twig.autoescape был установлен на false. Позже необходима защита XSS. И еще один блок {{autoescape}} был добавлен в некоторые поля. Спустя некоторое время в блоке autoescape был добавлен фильтр |raw, чтобы снова отключить автоматическое кэширование на некоторых полях.

Я пропустил фильтры |raw в ненужных блоках автобез. (Я, должно быть, пропустил контент, считая, что autoescape был установлен в true, но фильтр |raw применяется позже, поэтому содержимое остается необработанным.

Смежные вопросы