Desde el punto de vista de la seguridad, ¿debería escaparse bloginfo () o get_bloginfo ()?

10

He estado revisando una gran cantidad de información sobre temas de WP y la seguridad de los complementos y entiendo el concepto de que deberías evitar los atributos y los valores HTML en los temas y complementos. He visto que bloginfo() y echo get_bloginfo() usaron tanto la función estándar como la función esc_html() o esc_attr() .

Genesis y _s , el tema base de Automattic escapa de estos valores, pero la guía de estándares del tema Codex de WP sí No digas nada acerca de escapar de estos valores. He buscado en el código WP ( wp-includes/option.php ) y parece que hay un poco de sanitización de los valores pasados desde get_option() , pero también parece que hay un filtro que un complemento podría sobrescribir para ciertos valores.

Es este hecho el que me lleva a pensar que debería escaparse. ¿Alguien me puede iluminar sobre esto?

    
pregunta Paul Graham 14.01.2013 - 03:27

1 respuesta

13

Tenemos que profundizar un poco aquí para obtener una respuesta a su pregunta.

Entonces, bloginfo es un envoltorio simple alrededor de get_bloginfo .

<?php
function bloginfo( $show='' ) {
    echo get_bloginfo( $show, 'display' );
}

Note el segundo argumento display . Veamos que hace eso.

<?php
function get_bloginfo( $show = '', $filter = 'raw' ) {

    // snip snip, $output is fetched somewhere in here

    if ( 'display' == $filter ) {
        if ( $url )
            $output = apply_filters('bloginfo_url', $output, $show);
        else
            $output = apply_filters('bloginfo', $output, $show);
    }

    return $output;
}

Si el filtro se establece en display , la salida de get_bloginfo se ejecuta a través de un filtro.

En lugar de codificar algo como una llamada a esc_html en una función, WP usa su propio sistema de gancho para hacer cosas. El lugar para encontrar donde sucede eso es en wp-includes/default-filters.php . Una búsqueda rápida de bloginfo en ese archivo revela ...

<?php
// Format strings for display.
foreach ( array( 'comment_author', 'term_name', 'link_name', 'link_description', 'link_notes', 'bloginfo', 'wp_title', 'widget_title' ) as $filter ) {
    add_filter( $filter, 'wptexturize'   );
    add_filter( $filter, 'convert_chars' );
    add_filter( $filter, 'esc_html'      );
}

bloginfo está oculto en la matriz foreach . Como puede ver, la salida de bloginfo se escapa con esc_html .

En otras palabras, esto:

<?php
bloginfo('name');

Es equivalente a esto:

<?php
echo esc_html(get_bloginfo('name'));

O esto:

<?php
echo get_bloginfo('name', 'display');

Entonces, no, la salida de bloginfo no necesita ser escapada. Tampoco la salida de get_bloginfo mientras el segundo argumento esté establecido en display .

La advertencia, sin embargo, es que cualquiera puede eliminar el filtro esc_html de bloginfo . Así que es probable que sea más seguro escapar de la salida. Y, por supuesto, si está utilizando la salida de bloginfo para otra cosa que no sea la visualización HTML (por ejemplo, en el atributo alt de una imagen), debe ejecutarlo a través de esc_attr .

    
respondido por el chrisguitarguy 14.01.2013 - 03:41

Lea otras preguntas en las etiquetas