我在Symfony项目中使用Twig。
Symfony应启用autoescape by default。但是,默认情况下它不会这样做,在我手动启用后它仍然无效。
我已将Twig配置为自动显示所有变量。
twig:
autoescape: true
但这不会过滤任何东西。 HTML和JavaScript都不会被转义。
没有自定义的autoescape_service,我没有使用|raw
或{ autoescape false }
过滤变量。
我仔细检查生成的配置,以确保该值未被覆盖。 在twig服务定义下的 app / cache / 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选项吗?或者我如何强制启用它?
答案 0 :(得分:0)
在浪费时间试图找到解决方案之后,我总是在问我的问题后发现问题。
在开发过程中,twig.autoescape设置为false。
后来需要XSS保护。并且{{autoescape}}块已添加到某些字段中。一段时间后,在autoescape块中添加了|raw
过滤器,以再次禁用某些字段的自动转换。
我错过了不必要的autoescape块中的|raw
过滤器。 (我必须跳过将autoescape设置为true的内容,但稍后会应用|raw
过滤器以使内容保持原始状态。