Экранирование не применяется во включенном шаблоне с использованием Twig Bundle & Symfony 4.2 - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над проектом 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) или просто личное недоразумение ...

Спасибо за ваши отзывы!

...