Requisitos de escape para Twig / Timber dentro de WordPress

4 minutos de lectura

avatar de usuario
Brett

Estoy usando el sistema de plantillas Twig, así como el complemento Timber dentro de WordPress y una cosa que las páginas de Timber dicen sobre escapar es que:

Por defecto, Timber no escapa a la salida de las etiquetas estándar (es decir, {{ post.field }}). Si desea habilitar el comportamiento de escape automático, simplemente agregue estas líneas a functions.php:

https://timber.github.io/docs/guides/escapers/

¿Significa esto que si enciendo esto no tendré que escapar en absoluto? ¿No para el cuerpo html, los atributos, las URL, etc.?

Además, si yo no encienda esto, ¿significa esto que se recomienda hacer algo como esto:

<nav role="navigation">
    <ul class="main-nav">
        {% for item in menu.get_items %}
            <li class="{{ fn('esc_attr', (item.classes | join(' '))) }}">
                <a href="https://stackoverflow.com/questions/51640178/{{ 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>

solía fn('esc_attr', item.classes) para utilizar el escape de WordPress esc_attr ya que no parece que Timber tenga un escape para los atributos y la versión Twig no se agregó a 1.9pero parece que Timber está en 1.35.2.

¿Hay alguna desventaja en el escape automático? ¿No me parece que lo habría a menos que estuvieras planeando no escapar de todo? … y siempre puedes utilizar |raw si no quieres que se escape algo, supongo?

  • Diría que solo use el escape automático si no trata y no muestra los datos del usuario

    – Abeja Oscura

    2 de agosto de 2018 a las 5:26

  • Todo tiene desventajas, como usar un sitio web de preguntas y respuestas para desarrollar tu potencial.

    usuario4573148

    11 de agosto de 2018 a las 15:46

¿Hay alguna desventaja en el escape automático?

No. Se recomienda (y la funcionalidad predeterminada) ya que la salida sin procesar debe ser algo en lo que el desarrollador piense en el momento del desarrollo y no una idea posterior.

Digamos que tienes esto: <h1>{{ variable }}</h1> aquí hay una tabla de cómo se vería esto:

| Auto Escape | Default Functionality |
| ----------- | --------------------- |
|  Disabled   |  {{ variable|raw }}   |
|  Enabled    |  {{ variable|e }}     |

En twig tenemos estos filtros |raw y |escape (o |e).

¿Significa esto que si enciendo esto no tendré que escapar en absoluto? ¿No para el cuerpo html, los atributos, las URL, etc.?

No puedo decirlo con certeza, pero también voy a decir que no. Creo que lo que significa escape automático es simplemente lo que mencioné anteriormente. No seleccionará automáticamente una estrategia de escape (por lo que no sabrá cuándo usar |e('html')) pero en su lugar ejecute todo a través del estándar |e a menos que se ejecute manualmente |e('html') o |raw.

  • Hmmmm….. con eso en mente parece que no usar el escape automático sería la mejor idea, ya que entonces siempre los estaría ejecutando a través del mecanismo de escape correcto.

    – Brett

    9 de agosto de 2018 a las 17:26

Escapar es una operación vital para evitar ataques de secuencias de comandos en sitios cruzados (XSS). El escape automático es muy útil. Sin embargo, aquí hay algunas cosas a tener en cuenta:

doble escape: Si está escapando en WordPress y en Timber, verá cosas divertidas como el ampersand convertido en una entidad html.

 echo htmlentities('<strong>');
 echo '<BR><BR>';
 echo htmlentities(htmlentities('<strong>'));

Salidas en una página web:

<fuerte>

Deshabilitar escapar en dos lugares y perderlo:

Si bien el primer problema es feo y malo para la interfaz de usuario, el segundo problema puede hacer que su sitio web sea un vector de ataque:

echo '<script>alert("I own your website");</script>';

Su sitio web debe eliminar esto o mostrarlo como texto sin ejecutarlo (es decir, escapar de él).

Resultado final: Escapa siempre con uno, nunca con los dos.

¿Debería deshabilitar el escape de WordPress o el escape de Twig? Esa es una elección personal. Dejar el escape de Twig deshabilitado y el escape de WordPress habilitado es probablemente un poco menos tedioso.

Solo asegúrese de que si obtiene datos (sin escape) de una ubicación que no sea WordPress, escape usando los filtros de WordPress o Twig. Mi preferencia personal es apuntar a la consistencia.

Si Timber desactiva el escape automático, entonces mi inclinación sería dejarlo así, pero prueba, prueba, prueba.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad