Bre*_*ett 5 php wordpress sanitization twig timber
我正在使用Twig模板系统以及WordPress中的Timber插件,Timber页面关于转义的一件事就是:
默认情况下,Timber不会转义标准标记的输出(即{{post.field}}).如果要启用autoescape行为,只需将这些行添加到functions.php:
https://timber.github.io/docs/guides/escapers/
这是否意味着如果我打开它我不需要做任何逃避?不适用于html正文,属性,网址等?
另外,如果我不打开它,这是否意味着建议做这样的事情:
<nav role="navigation">
<ul class="main-nav">
{% for item in menu.get_items %}
<li class="{{ fn('esc_attr', (item.classes | join(' '))) }}">
<a href="{{ item.get_link|e('esc_url') }}">{{ item.title|e }}</a>
{% if item.children %}
<ul class="sub-menu">
{% for child in item.children %}
<li class="sub-menu-item">
<a href="{{ child.get_link|e('esc_url') }}">{{ child.title|e }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
</nav>
Run Code Online (Sandbox Code Playgroud)
我以前习惯fn('esc_attr', item.classes)使用WordPress escaper,esc_attr因为看起来Timber没有属性的转义,Twig版本没有添加到1.9,但看起来Timber在1.35.2上.
自动转义有什么缺点吗?在我看来,除非你计划不逃避一切,否则我不会这样做?... |raw如果你不想要逃脱的话,你可以随时使用我会假设的吗?
小智 4
自动转义有什么缺点吗?
不。建议(也是默认功能),因为输出原始数据应该是开发人员在开发时考虑的事情,而不是事后的想法。
假设你有这个:<h1>{{ variable }}</h1>下表显示了它的样子:
| Auto Escape | Default Functionality |
| ----------- | --------------------- |
| Disabled | {{ variable|raw }} |
| Enabled | {{ variable|e }} |
Run Code Online (Sandbox Code Playgroud)
在 twig 中,我们有这些过滤器|raw和|escape(或|e)。
这是否意味着如果我打开此功能,我将不需要进行任何转义?不是针对 html 正文、属性、url 等?
我不能肯定地说,但我也会说不。我相信自动转义的含义就是我上面提到的。它不会自动选择转义策略(因此它不知道何时使用|e('html')),而是通过标准运行所有内容|e,除非手动运行|e('html')或|raw。