Symfony树枝-允许在HTML转义元素中使用树枝全局变量


Symfony Twig - Allowing the use of Twig Globals in a HTML escaped element

我正在尝试一些实验性的东西,我希望能完成。

我正在写一个应用程序,其中有一个CMS系统与它建立。我希望允许用户分配他们自己的全局变量,并在他们创建的页面中使用它们。

例如,用户可以创建一个变量foo。在分支文件中,您可以通过使用{{ foo }}来引用它,因为它被加载到全局作用域中。

我希望能够使用这些全局变量,但是在|raw转义元素中呈现,例如页面内容。

所以,目前加载一个HTML元素,我必须使用{{ page.content|raw }}。不幸的是,这导致foo变量渲染出{{ foo }},因为它不被识别为将其用作变量。

是否有任何方法使{{ foo }}呈现为变量,而不是字面上?

使用template_from_string分支函数:

http://twig.sensiolabs.org/doc/functions/template_from_string.html

我会非常小心,通过|raw过滤器运行任何用户输入都可能导致XSS攻击。此外,您可能还想阅读有关模板注入攻击的文章。如果你允许你的用户写一些琐碎的东西,你可能会有风险。

https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf

至于你的问题的解决办法。

也许你可以使用includes

{% include 'AcmeYourBundle:User:PageOutput.html.twig' with {'userVars': UserVars} only %}

其中UserVars是用户的变量。然后你可以输入

{% for var in UserVars %}