twig escape(' js')symfony2

时间:2014-09-25 21:06:22

标签: javascript html symfony twig

假设我有内容的文章(内容有html标签)..所以:

{{article.content|raw}}

看起来不错。

问题是用户是否添加了脚本标签 - 所以我尝试着

{{article.content|raw|e('js')}}

它逃脱了所有..我的意思是html等等..

我得到双重转义文本,我没有任何html标签,它们都被转义..是某种树枝虫还是什么?

例如: 我有"<p>test</p>"

{{article.content|raw}}我会看到{{article.content|raw|e('js')}}的“测试”我会看到"\x3Cp\x3Etestas\x3C\x2Fp\"。那有什么不对?我知道我可以在服务器端转义脚本标签,但我很想知道我的方法有什么问题..

2 个答案:

答案 0 :(得分:0)

使用转义过滤器的作业有错误的工具。根据您所编写的内容,“原始”过滤器不执行任何操作,并且转义将转义您输出的字符串,以便它适合作为输出的Javascript部分中的数据包含。

您正在寻找的是像HtmlPurifier这样的XSS过滤器。一旦您使用了作曲家或直接安装在项目中包含XSS过滤器,您就可以为Twig编写一个自定义过滤器,它将过滤掉脚本标签等XSS向量,并通过原始过滤器为您提供可变安全输出

答案 1 :(得分:0)

经过https://twigfiddle.com/

的测试
{{'<p>test</p><script>const me = "hi"</script>'|raw}}
{{'<p>test</p><script>const me = "hi"</script>'|e('js')}}
{{'<p>test</p><script>const me = "hi"</script>'|e('html')}}
{{'<p>test</p><script>const me = "hi"</script>'|e('html_attr')}}
{{'<p>test</p><script>const me = "hi"</script>'|striptags}}
{{'<p>test</p><script>const me = "hi"</script>'|striptags|raw}}

/*
<p>test</p><script>const me = "hi"</script>
\u003Cp\u003Etest\u003C\/p\u003E\u003Cscript\u003Econst\u0020me\u0020\u003D\u0020\u0022hi\u0022\u003C\/script\u003E
&lt;p&gt;test&lt;/p&gt;&lt;script&gt;const me = &quot;hi&quot;&lt;/script&gt;
&lt;p&gt;test&lt;&#x2F;p&gt;&lt;script&gt;const&#x20;me&#x20;&#x3D;&#x20;&quot;hi&quot;&lt;&#x2F;script&gt;
testconst me = &quot;hi&quot;
testconst me = "hi"
*/