¿Por qué debería usar esc_url?

12 sept 2015, 22:00:12
Vistas: 30.3K
Votos: 20

Esto hace que mi código sea más difícil. El codex de WordPress explica el uso de esc_url hablando vagamente sobre seguridad. Pero, ¿realmente vale la pena la molestia?

Por ejemplo, ¿cuál es el beneficio práctico importante de seguridad al usar

<?php echo esc_url( home_url( '/' ) ); ?>

en lugar de

<?php echo home_url() ?>

PD: No estoy hablando sobre desarrollo de temas, sino sobre un sitio específico.

0
Todas las respuestas a la pregunta 4
4
20

Si revisas la documentación sobre Validación de Datos, tiene lo siguiente que decir acerca de la función:

Siempre usa esc_url cuando sanitices URLs (en nodos de texto, nodos de atributo o en cualquier otro lugar). Rechaza URLs que no tengan uno de los protocolos permitidos [...], elimina caracteres inválidos y remueve caracteres peligrosos.

Ahí lo tienes — un beneficio de seguridad práctico. Protocolo válido, sin caracteres sospechosos.

La respuesta sobre la necesidad es firmemente . Escapar la salida es la práctica de seguridad más básica.

12 sept 2015 23:33:10
Comentarios

Con todo respeto, no veo cómo el enlace de inicio, por ejemplo, puede representar un riesgo de seguridad. ¿Quizás estas pautas son para la creación de temas y no se aplican a código "privado"? Después de todo, puede ser mejor codificar manualmente la dirección de inicio y otros enlaces en HTML y no usar PHP en absoluto si existen riesgos de seguridad.

IXN IXN
13 sept 2015 00:23:39

Es mucho más productivo aplicar prácticas de seguridad de manera consistente y universal, que debatir si cada caso en particular vale la pena. :)

Rarst Rarst
13 sept 2015 01:40:34

Por otro lado, un recurso sugerido por el Codex establece Regla N°3: Confía en WordPress. Esto parece recomendar en contra de sobresanear funciones principales de wp como home_url(), si se usan en su contexto adecuado. Según esta recomendación, esperaría que home_url realizara su propio saneamiento.

Franco Franco
11 jun 2017 12:37:48

Lo siento, soy bastante nuevo en este tema, pero ¿alguien podría dar un ejemplo donde home_url() o quizás get_permalink() (que por lo que sé también debería usarse con esc_url()) devuelva una URL inválida o no saneada? No quiero ser vago o terco, por lo que un ejemplo podría ayudarme a entender el uso.

SunnyRed SunnyRed
25 jul 2022 22:01:34
0

Otras cosas que debes tener en cuenta sobre esc_url() es que se usa para algo como <a href="SANITIZAR_ESTA_URL">tu_texto</a>. Si vas a usar la URL en tu salida HTML, como un atributo href para un enlace, o un atributo src para un elemento de imagen, debes usar esc_url().

esc_url_raw() es para otros casos donde quieres una URL limpia, pero no quieres que las entidades HTML sean codificadas. Por lo tanto, cualquier uso no HTML (base de datos, redirecciones) usaría esta función.

La función esc_url_raw() hará prácticamente lo mismo que esc_url(), pero no decodificará entidades, lo que significa que no reemplazará & con &#038 y así sucesivamente. Como señaló Mark, es seguro usar esc_url_raw() en consultas de bases de datos, redirecciones y funciones HTTP, como `wp_remote_get()' para más información sobre esc_url_raw()

13 sept 2015 00:29:11
2

bueno, toda entrada de usuario debe ser saneada... Si la URL que inyectas no es entrada de usuario (por ejemplo, configuración del sitio por alguien en quien confías plenamente, valores codificados directamente) entonces puedes prescindir de esc_url.

pero si pudiera inyectar esa URL en tu sitio, fácilmente podría inyectar código JS, código de redirección... o incluso código del lado del servidor en algunas situaciones.

esto puede llevar a secuestro de sesiones y cuentas de tus usuarios siendo robadas, entre otras malas opciones.

Edición:

En tu ejemplo esc_url( home_url( '/' ) );
¡operó sobre un valor semi-codificado directamente! por lo tanto, esc_url puede eliminarse.
Dicho esto, todavía no veo por qué molestarse en hacer distinciones entre cuándo hay una amenaza y cuándo no, y en general sugeriría mantener esc_url() para cada valor.

13 sept 2015 10:19:58
Comentarios

"La configuración del sitio por alguien en quien confías" sigue siendo literalmente entrada del usuario. :)

Rarst Rarst
13 sept 2015 18:57:21

@Rarst sí, estoy de acuerdo contigo, pero él estaba tan "disgustado" por usar esc_url, que fui un poco más indulgente.

Tomer W Tomer W
13 sept 2015 19:14:00
1

esc_url se utiliza para generar un HTML válido (no para sanitizar entradas). Debes usar esta función cada vez que no estés 100% seguro de que lo que quieres mostrar es un HTML válido para ese contexto.

12 sept 2015 22:11:13
Comentarios

Todas las funciones de escape están explícitamente diseñadas para saneamiento.

Rarst Rarst
12 sept 2015 23:29:02