2015-10-13 61 views
1

我想在这里尝试一些相当实验,我希望能够做到。Symfony Twig - 允许在HTML转义元素中使用Twig Globals

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

例如,用户可以创建一个名为foo的变量。在树枝文件中,您可以使用{{ foo }}来引用它,因为它已加载到全局范围中。

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

因此,目前要加载一个HTML元素,我必须使用{{ page.content|raw }}。这不幸地导致foo变量渲染出{{ foo }},因为它不被认为用作变量。

是否有任何方法使{{ foo }}渲染为变量而不是字面?

回答

0

我将与此非常小心,通过运行任何用户输入|原料过滤器可能导致XSS攻击。 您也可以阅读关于模板注入攻击的内容。如果你允许你的用户编写树枝,你可能会面临风险。

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

至于解决你的问题。

也许你可以使用包括

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

哪里的UserVars是变量形成你的用户。您可以在模板中包含

{% for var in UserVars %} 

+0

的任何html都很好。不幸的是,因为变量是内容本身的一部分,所以这不起作用,因为我不得不以某种方式将变量分离出流。 –