繁体   English   中英

HTML Symfony Twig 中的实体

[英]HTML Entities in Symfony Twig

我目前正在对一位朋友进行代码审查,我发现了一个我想正确理解的 XSS 漏洞:

假设我有一个带有输入<h1>test</h1>的变量foo.bar

我现在想出了这个模式:

{{foo.bar}} -> no XSS

{% trans with { '%var%': foo.bar } %} My "%var%" {% endtrans %} -> XSS 

{% trans with { '%var%': foo.bar | e('html') } %} My "%var%" {% endtrans %}  -> no XSS

我想我会在他的整个代码中运行一个正则表达式模式,以找到可能对 HTML 字符进行错误编码的其他地方,但我不太明白 twig 何时编码 Z4C4AD5FCA2E7A3F74DBB1CED00381AA4 而不是。 我确实理解“e”(编码)function 解码我在 html 实体中的变量值,但为什么{{foo.bar}}编码字符而{% trans with...不是?

我会用这种模式搜索 Twig 中的编码错误:

Regex: 
'\{%(.){0,2}[trans](.){0,2}[with].*'

-> Searching for "{%[space?]trans[space?] with"

正如我猜想每次他错过|e('html')可能会有问题。 我在正确的轨道上吗? 我错过了什么吗?

我希望我能在这里找到关于这个主题的更多说明:)

Twig 总是转义,但“trans with”是 symfony 的一部分,而不是 twig 的一部分。 它不会自动转义,因为它被传递给标签,并且标签可能会 output 但这并不确定,所以这就是他们拒绝自动转义的原因。

我个人总是使用 |trans() 过滤器,所以默认情况下你知道你是安全的,如果需要,你当然仍然可以使用 |raw。

https://symfony.com/doc/current/translation/templates.html

使用翻译标签或过滤器具有相同的效果,但有一个细微的区别:自动 output escaping 仅适用于使用过滤器的翻译。 换句话说,如果您需要确保您的翻译消息不是 output 转义,则必须在翻译过滤器之后应用原始过滤器:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM