假设我有一篇文章(内容有 html 标签).. 所以:
{{article.content|raw}}
看起来不错。
问题是如果用户添加脚本标签 - 所以我尝试这样做
{{article.content|raw|e('js')}}
它逃脱了所有..我的意思是html等等..
我得到双重转义文本,我不再有任何 html 标签,它们都被转义了..这是某种 Twig 错误还是什么?
例子:
我有"<p>test</p>"
与 {{article.content|raw}}
我将看到 {{article.content|raw|e('js')}}
的“测试”我会看到 "\x3Cp\x3Etestas\x3C\x2Fp\"
.那怎么了?我知道我可以在服务器端转义脚本标签,但我很想知道我的方法有什么问题..
最佳答案
使用转义过滤器时,您使用了错误的工具来完成这项工作。对于您所写的内容,“原始”过滤器什么都不做,并且转义符会转义您正在输出的字符串,以便它适合作为数据包含在输出的 Javascript 部分中。
您正在寻找的是像 HtmlPurifier 这样的 XSS 过滤器.一旦你使用 composer 或直接安装在你的项目中包含一个 XSS 过滤器,你就可以为 Twig 编写一个自定义过滤器,它将过滤掉 XSS 向量,如脚本标签等,并为你留下一个变量,可以通过原始过滤器安全地输出.
关于javascript - Twig 转义 ('js' ) symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26048091/