Я работаю над проектом Symfony 4.2.12 с установленным пакетом Twig. Стратегия побега веток - по умолчанию 'html': я ничего об этом не изменил.
Я понял, что экранирующие фильтры | e ('html'), | e ('html_attr') .. не применяются в шаблоне Twig , тогда как в родительском шаблоне работает нормально . Возможно, я пропустил что-то вроде «контекста» в отношении побега, но это создает большую проблему, такую как нежелательная xss-уязвимость.
Может быть, это происходит от l oop, который вызывает включенный шаблон для каждой итерации ... и экранированные переменные не хранятся в памяти, или что-то в этом роде!
Не проверено (возможно, бесполезно): я не уверен, динамические c имена переменных для каждого включения может быть способом решения проблемы ...
Во-первых, я наблюдаю, что по умолчанию html autoescape не работает во включенном шаблоне: более того, двойное экранирование также необходимо для данных, чтобы фильтры выполняли свою работу!
Например, для создания фильтров работать во включенном шаблоне, я должен объявить их следующим образом, дважды убегая: | e | e ('html_attr') , et c ...
включенный шаблон
<!-- Strangely default filter does not work in included template, i have also to use it by escaping twice! -->
{{ myVar1|e|e('html') }}
<!-- This is not 'html' escaped as it should be! -->
{{ myVar1 }}
<!-- Please note the necessary double escaping!? -->
<img src="..." alt="{{ myVar2|e|e('html_attr') }}">
Родительский шаблон l oop
...
<!-- This is correctly 'html' escaped as expected! -->
{{ myVar }}
<!-- This is correctly 'html_attr' escaped as expected! -->
<a href="{{ myVar|e('html_attr') }}" ...></a>
{% for object in parentObject.objects %}
....
{# Obviously, here, any of these passed vars are also correctly escaped with all filters! #}
{% include 'my_include.html.twig' with {
'myVar1': myValue1,
'myVar2': myValue2,
'myVar3': myValue3|e('html_attr'),
...
} only %}
....
{% endfor %}
....
Интересно, это хорошо известная проблема, ошибка (для этой версии пакета Twig) или просто личное недоразумение ...
Спасибо за ваши отзывы!