¿Por qué debería usar el esc_url?

12

Esto dificulta mi codificación. Wordpress codex razona el uso de esc_url al hablar vagamente sobre seguridad. ¿Pero realmente vale la pena?

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

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

en lugar de

<?php echo home_url() ?>

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

IXN
fuente

Respuestas:

12

Si revisa la documentación sobre Validación de datos , tiene que decir sobre la función:

Utilice siempre esc_url al desinfectar URL (en nodos de texto, nodos de atributos o en cualquier otro lugar). Rechaza las URL que no tienen uno de los protocolos incluidos en la lista blanca, [...] elimina los caracteres no válidos y elimina los caracteres peligrosos.

Ahí lo tienes: beneficio práctico de seguridad. Protocolo válido, sin caracteres turbios.

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

Rarst
fuente
2
Con el debido respeto, no puedo ver 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 para el código "privado"? Después de todo, ¿puede ser mejor codificar la dirección del hogar y otros enlaces en html y no usar php si existen riesgos de seguridad?
IXN
99
Es mucho más productivo aplicar prácticas de seguridad de manera consistente y universal, que debatir si todos y cada uno de los casos valen la pena. :)
Rarst
77
Por otro lado, un recurso sugerido por el Codex establece la Regla N ° 3: Confiar en WordPress . Esto parece recomendarse contra las funciones básicas de wp excesivamente higiénicas como home_url(), si se usan en su contexto adecuado. De acuerdo con esta recomendación, hubiera esperado home_urlrealizar su propia desinfección.
Franco
3

bueno, todas las entradas del usuario deben desinfectarse ... Si la url que inyecta no es una entrada del usuario (por ejemplo, la configuración del sitio por alguien en quien confía completamente, valores codificados), entonces puede liberarse de esc-url.

pero si pudiera inyectar esa url en su sitio, podría inyectar fácilmente el código js o el código de redireccionamiento ... o incluso el código del lado del servidor en algunas situaciones.

Esto puede conducir al secuestro de sesión y al robo de sus cuentas de usuario y otras malas opciones.

Editar:

En su ejemplo esc_url( home_url( '/' ) );
, ¡funcionaba con un valor semicodificado! por esc_urllo tanto puede ser eliminado.
Dicho esto, todavía no veo por qué molestar las distinciones entre cuando existe una amenaza y cuándo no existe y, en general, sugeriría mantener esc_url () para cada valor.

Tomer W
fuente
3
"La configuración del sitio por alguien en quien confías" sigue siendo literalmente una entrada del usuario. :)
Rarst
@Rarst, sí, estoy contigo, pero estaba tan "disgustado" al usar esc_url, he sido un poco más indulgente.
Tomer W
2

Otra cosa que debe tenerse en cuenta esc_url()es algo como <a href="SANITIZE_THIS_URL">your_text</a>.si va a usar la URL en su salida HTML, como un atributo href para un enlace, o un atributo src para un elemento de imagen, debe usar esc_url().

esc_url_raw()es para otros casos en los que desea una URL limpia, pero no desea que se codifiquen las entidades HTML. Por lo tanto, cualquier uso que no sea HTML (DB, redirigir) usaría esto.

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

MD MUSA
fuente
1

esc_url se usa para producir un HTML válido (no para desinfectar la entrada). Debería usar esto cada vez que no esté 100% seguro de que lo que desea generar es un HTML válido para ese contexto.

Mateo
fuente
Toda la familia de las funciones de escape son explícitamente para desinfectar.
Rarst