esc_url() y seguridad de WordPress?

4 minutos de lectura

¿Alguien puede explicar cuándo usar funciones de escape?

Mi objetivo es asegurar mi tema de WordPress. Usé un tema en blanco de Chris Coyier y agregué código para hacer el sitio web que quería. Noté que otros temas usaban funciones de escape pero no el tema en blanco de Coyier, así que quiero entender dónde insertarlos.

Después de leer Codex y los resultados de Google e investigar el código de algunos temas, todavía no tengo claro cuándo usar

esc_url()  
esc_attr()  
esc_html()  

No veo un patrón de cuándo usarlos. Por ejemplo, en un tema, para home_url (“https://stackoverflow.com/”) — observe que esc_url se usa en header.php pero no en searchform.php — ¿Por qué?

encabezado.php

<a href=
// NOTICE ESCAPING FUNCTION BELOW
"<?php echo esc_url( home_url( "https://stackoverflow.com/" ) ); ?>"
title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a>

formulario de búsqueda.php

<form role="search" method="get" id="searchform" action=
// NO ESCAPING FUNCTION BELOW
"<?php echo home_url( "https://stackoverflow.com/" ); ?>"
>

  • Aquí hay un ejemplo de cuándo usar esc_url en vez de esc_attr para prevenir XSS: <a href="<?= esc_url('javascript:alert(1)') ?>">test</a>. si hubieras usado esc_attrel código JavaScript aún se ejecutaría.

    – bautismo

    20 de julio de 2019 a las 11:03


avatar de usuario
jose hansen

Las funciones de escape sirven para protegerse contra ataques y personajes extraños. Algunas de las cosas que hacen las funciones son eliminar caracteres no válidos, eliminar caracteres peligrosos y codificar caracteres como entidades HTML.

El problema es que los datos que no son de confianza provienen no solo de los usuarios, sino que también pueden provenir de elementos guardados en su propia base de datos.

Como regla general, es bueno usar las funciones de escape cuando alguna parte de la URL no es generada por las funciones de WordPress. Si la URL completa se genera solo mediante funciones de WordPress, las funciones de escape no son necesarias.

Por ejemplo, si desea imprimir la URL y agregar una cadena de consulta como esta

<?php echo get_permalink() . '?order=time' ?>

debe tener el hábito de usar una función de escape porque escribió parte de la URL real.

<?php echo esc_url(get_permalink() . '?order=time') ?>

Aún así, sería mejor usar el add_query_string funciona así

<?php echo add_query_arg('order', 'time', get_permalink()) ?>

En este segundo ejemplo, no necesitaría una función de escape porque la URL es generada completamente por funciones de WordPress.

En su ejemplo en la pregunta, la función de escape no es necesaria en el encabezado.php expediente. La persona que escribió ese código probablemente solo tenía el hábito de hacerlo y está bien ponerlo allí incluso cuando no es necesario.

Un buen lugar para comenzar a leer sobre la validación de datos sería el códice de WordPress: https://codex.wordpress.org/Data_Validation

Debe usar la función de escape de wordpress para cualquier contenido insertado por el usuario, no necesario para la función wordpress. Pero en complementos, plantillas, formularios o cosas como esta, debe usar las funciones de escape.

  • John, ¿puedes aclarar…? 1. Por contenido insertado por el usuario, ¿te refieres a un formulario de búsqueda, formulario de contacto y suscripción al boletín? ….. 2. En mi ejemplo con respecto a home_url (‘/’), ¿puede explicar por qué esc_url() se usa en header.php y no en searchform.php? Estos archivos php están dentro del mismo tema.

    – estadio

    23 de julio de 2014 a las 22:12

  • en searchform.php no se usa porque no es necesario y en el encabezado porque solían escapar de cualquier cosa, supongo

    – John

    23 de julio de 2014 a las 23:01

  • ¿Pero el formulario de búsqueda no se considera contenido “insertado por el usuario”? Por lo tanto, usaría esc_url () … ¿correcto?

    – estadio

    23/07/2014 a las 23:50

  • sí, pero si tiene cuidado, puede ver que el enlace generado es para el atributo “acción”, por lo que no es necesario escapar de esa URL …

    – John

    24 de julio de 2014 a las 2:06

Debe usar las funciones de escape de wordpress para que cualquier usuario inserte contenido como dice John.

Eche un vistazo al enlace que proporcioné para conocer las funciones de escape de wordpress.

http://codeseekah.com/2012/03/13/wordpress-escape-functions/

  • Se desaconsejan las respuestas que consisten solo o principalmente en enlaces, ya que el contenido del sitio remoto puede cambiar o desaparecer, y los lectores tienen que hacer clic en el enlace para ver si es útil. El enfoque recomendado es resumir los puntos principales en la respuesta misma e incluir el enlace como “lectura adicional”.

    – IMSoP

    23 de julio de 2014 a las 18:41

¿Ha sido útil esta solución?