El lenguaje de marcado de hipertexto, o HTML, es el lenguaje principal de las páginas web en Internet. Incluye soporte para otros lenguajes que agregan funcionalidad y estilo adicionales, como JavaScript y CSS. Todos estos lenguajes se basan en texto con caracteres significativos que se utilizan para separar las 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 cualquiera de los caracteres importantes en el navegador. Los mejores ejemplos de caracteres a 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. La forma correcta de imprimir estos caracteres en la pantalla de forma segura es utilizar entidades HTML.
Entidades HTML y seguridad
Gracias al significado especial de estos caracteres, debes tener mucho cuidado al reemplazarlos con la versión de entidad HTML si deseas que se impriman en el navegador. Desafortunadamente, muchos desarrolladores web olvidan que los usuarios pueden enviar sus contribuciones a muchos sitios web. Si esta entrada del usuario incluye caracteres importantes y no se reemplazan con entidades HTML, en un proceso llamado desinfección, entonces el sitio web tiene una vulnerabilidad de secuencias de comandos entre sitios (XSS).
Consejo: No intente enviar caracteres especiales a sitios web para intentar detectar vulnerabilidades XSS. Esto técnicamente constituye 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 a veces no lo hacen)
Las entidades HTML funcionan porque el navegador sabe mostrarlas como el carácter especial relevante y no tratarlas como un carácter especial. Todas las entidades HTML comienzan con un signo «&» 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, » & «, » < » et « > » tener números de entidad “&”, “ < » et « > ” así como los nombres de entidad “&”, “<” y “>” respectivamente. El navegador sabe que estas cadenas significan que debería mostrar los caracteres relevantes.
Consejo: se puede encontrar una lista completa de nombres de entidades de caracteres aquíaunque la compatibilidad con nombres de entidades varía según el navegador.
En la mayoría de los casos, los usuarios sólo deberían ver caracteres representados por entidades HTML. Sin embargo, es posible ver caracteres codificados, generalmente un signo «&», mediante un proceso llamado «doble codificación». Esto sucede cuando el carácter comercial aparece en su propia versión codificada. La doble codificación generalmente ocurre cuando la entrada está codificada correctamente tal como se envió; sin embargo, al salir se desinfecta nuevamente. Esto da como resultado que el signo comercial al comienzo de “&” se codifique por segunda vez y aparezca como “& «, el navegador lo interpreta correctamente como una cadena que debe imprimirse como «&» después de decodificar la entidad HTML e ignorar la entidad parcial.