D.W. tiene algunos puntos excelentes, pero me gustaría señalar algunas cosas:
Este código hace cuatro cosas:
- Elimina caracteres y construcciones que pueden engañar a los navegadores.
- Se asegura de que todas las entidades HTML estén bien formadas.
- Se asegura de que todas las etiquetas y atributos HTML estén bien formados.
- Se asegura de que ninguna etiqueta HTML contenga URL con un protocolo no permitido (por ejemplo,
javascript:
).
Suponiendo que hace un excelente trabajo de todas las cosas en esta lista, hay algunas omisiones notables: equilibrio de etiquetas , ataques de nivel de codificación , enlace de spam .
Incluso si lo hace bien, HTMLPurify ha existido y ha sido atacado. Puedo pensar en al menos un académico de seguridad en mi cabeza, que se asegura de que HTMLPurify esté parcheado y estable antes de publicar nuevos ataques. Si Drupal no recibe un escrutinio similar, usaría el más endurecido.
Equilibrio de etiquetas
Si la seguridad de sus usuarios depende de que puedan distinguir el contenido que usted creó de los autores o de terceros, el equilibrio de etiquetas es importante.
Imagina que usaste <table>
s para formatear. Las etiquetas no balanceadas pueden permitirles sacar contenido de la región que parece ser contenido de terceros en una región de la página que parece estar controlada por los propietarios del sitio. Por ejemplo, si su lista blanca incluye etiquetas de formato inocuas, como <table>
, entonces
</table>
<center>If you have any questions,
<a href="[email protected]">contact us</a>
<br>Bogus copyright</center><br><br><br><br><sub><sub><sub><sub><sub>
podría permitir que el atacante falsifique un pie de página que contenga enlaces de phishing.
Un aparente e inocuo </ul>
podría ayudar a un atacante a salir de una lista de comentarios de usuarios que se muestran usando <ul><li>...</ul>
por HTML semántico.
Las listas blancas configurables por el usuario le dan mucho espacio para colgarse aquí, ya que los expertos en HTML suponen acertadamente que los elementos equilibrados como <table>
y <ul>
no hacen nada sensible a la seguridad (solo crean recuadros en torno al contenido fluido) , pero las etiquetas individuales son problemáticas.
Ataques de nivel de codificación
Si el atacante puede obtener contenido desinfectado en los primeros kB de una página HTML que no tenga un encabezado Content-type
que especifique una codificación, entonces podría engañar a IE para que trate la página como UTF-7 , evitando todos los demás desinfectantes.
Esto puede caer en "construcciones que pueden engañar a los navegadores", pero el código fuente en esa página no indica que sí.
Enlace de spam
Si permites enlaces pero el desinfectante no agrega rel="nofollow"
a los enlaces, tu reputación puede ser secuestrada.