在WordPress中逃避Twig/Timber的要求

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