El lenguaje de marcado de hipertexto, o HTML, es el idioma principal de las páginas web en Internet. Incluye soporte para varios otros lenguajes que agregan funcionalidad y estilo adicionales, como JavaScript y CSS. Todos estos lenguajes se basan en texto con algunos caracteres significativos que se utilizan para separar cadenas literales que deben imprimirse en el navegador y el código que debe interpretarse y ejecutarse.
Sin embargo, este diseño tiene algunos problemas, que se vuelven obvios cuando desea imprimir uno de los caracteres significativos en el navegador. Los mejores ejemplos de caracteres que se pueden utilizar son los símbolos "menor que" y "mayor que". Respectivamente, estos símbolos se utilizan para abrir y cerrar segmentos de código en HTML. El método correcto para imprimir estos caracteres en la pantalla de forma segura es utilizar entidades HTML.
Entidades HTML y seguridad
Gracias a que estos caracteres tienen un significado especial, debe tener mucho cuidado para asegurarse de reemplazarlos con la versión de la entidad HTML si desea que se impriman en el navegador. Desafortunadamente, muchos desarrolladores web olvidan que los usuarios pueden enviar información a muchos sitios web. Si esta entrada del usuario incluye caracteres significativos y no se reemplazan con entidades HTML, en un proceso llamado desinfección, entonces el sitio web tiene una vulnerabilidad de Cross-Site Scripting (XSS).
Consejo: no intente enviar caracteres especiales a sitios web en un intento de encontrar vulnerabilidades XSS. Si lo hace, técnicamente es piratería y es un delito penal a menos que tenga el permiso del propietario del sitio web.
Cómo funcionan las entidades HTML (y en ocasiones no)
Las entidades HTML funcionan porque el navegador sabe mostrarlo como el carácter especial relevante y no tratarlo como un carácter especial. Todas las entidades HTML comienzan con un ampersand "&" y terminan con un punto y coma ";". La mayoría de los caracteres se identifican mediante un número de entidad, aunque algunos caracteres especiales también tienen un nombre abreviado. Por ejemplo, “&”, “” tienen los números de entidad “&”, “”, así como los nombres de entidad “&”, “” respectivamente. El navegador sabe que estas cadenas significan que necesita mostrar los caracteres relevantes.
Consejo: se puede encontrar una lista completa de nombres de entidades de personajes aquí, aunque la compatibilidad con el nombre de la entidad varía según el navegador.
En la mayoría de los casos, los usuarios solo deberían ver los caracteres que representan las entidades HTML. Sin embargo, es posible ver caracteres codificados, comúnmente y comercial "&", a través de un proceso llamado "codificación doble". Esto sucede cuando el carácter comercial aparece en su propia versión codificada. La codificación doble generalmente ocurre cuando la entrada se codifica correctamente, ya que se envía, sin embargo, cuando se envía, se desinfecta nuevamente. Esto da como resultado que el signo comercial al comienzo del "&" se codifique por segunda vez y aparezca como "&", el navegador luego lo interpreta correctamente como una cadena que debe imprimirse como "&" habiendo decodificado la entidad HTML e ignorado el parcial entidad.