[英]twig escape('js') symfony2
假设我有文章内容(内容有 html 标签)..所以:
{{article.content|raw}}
看起来不错。
问题是如果用户添加脚本标签 - 所以我尝试做
{{article.content|raw|e('js')}}
它逃脱了所有..我的意思是html等等..
我得到了双重转义文本,我不再有任何 html 标签,它们都被转义了..是某种树枝虫还是什么?
示例:我有"<p>test</p>"
使用{{article.content|raw}}
我会看到 "test" 使用{{article.content|raw|e('js')}}
我会看到"\\x3Cp\\x3Etestas\\x3C\\x2Fp\\"
。 那么怎么了? 我知道我可以在服务器端转义脚本标签,但我很想知道我的方法有什么问题..
您使用转义过滤器的工作使用了错误的工具。 使用您编写的内容,“原始”过滤器不执行任何操作,转义符会转义您输出的字符串,以便将其作为数据包含在输出的 Javascript 部分中。
您正在寻找的是像HtmlPurifier这样的 XSS 过滤器。 一旦你使用 composer 或直接安装在你的项目中包含一个 XSS 过滤器,你就可以为 Twig 编写一个自定义过滤器,它会过滤掉脚本标签等 XSS 向量,并为你留下一个变量,可以通过原始过滤器安全输出.
{{'<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
<p>test</p><script>const me = "hi"</script>
<p>test</p><script>const me = "hi"</script>
testconst me = "hi"
testconst me = "hi"
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.