ForHosting KIT · Datos y archivos

Sanear HTML

Quite las partes peligrosas de un HTML antes de mostrarlo: en el ejemplo desaparecen un script, un marco incrustado, una acción oculta al hacer clic y un enlace a código, y solo quedan el párrafo Hola y la palabra click. Gratis en su navegador.

  • Gratis
  • Funciona en su navegador
  • Sin registro
  • Sus datos no salen de su equipo
Úselo desde WebAPIEmailTelegramApp pronto

En cualquier lugar donde los usuarios puedan enviar texto enriquecido (comentarios, biografías, tickets de soporte, correos con formato) un atacante puede intentar colar una etiqueta de script.

Por qué una lista de permitidos supera a una de prohibidos

En cualquier lugar donde las personas pueden enviar texto con formato, como comentarios, biografías, incidencias de soporte o correos, alguien puede intentar colar un script. La limpieza sólida funciona con una lista de permitidos y no con una lista de patrones prohibidos: define qué etiquetas y atributos son seguros y descarta todo lo demás, incluido lo que un navegador podría reinterpretar de forma inesperada. Esto importa porque los navegadores toleran muchísimo el marcado roto, y un código que parece inofensivo en un sitio puede ejecutarse en otro. Así se han burlado las listas de etiquetas prohibidas desde que existe el texto enriquecido en la web.

Qué sale y dónde usarlo

En el ejemplo entran un párrafo con una acción oculta al hacer clic, un script, un enlace que apunta a código y un marco incrustado, y solo salen el párrafo con Hola y el texto del enlace, click. El formato inofensivo, como la negrita, los enlaces y los saltos de línea, está pensado para sobrevivir. Úselo en las biografías de una comunidad, en los artículos de colaboradores externos antes de que lleguen al sitio publicado y en los visores de comentarios o incidencias que muestran el HTML de una persona a otras. Limpie a la entrada, antes de guardar, en lugar de confiar en que la página lo escape bien más tarde, y no dependa solo de comprobaciones en el navegador de quien envía.

Lista blanca, no adivinanza

Un saneo bien hecho funciona por lista blanca, no por lista negra: en vez de intentar enumerar cada patrón peligroso, define qué etiquetas y atributos son seguros y descarta todo lo demás, incluido cualquier fragmento que un analizador de navegador tolerante con errores pudiera reinterpretar de una forma que el saneador no anticipó.

Esto importa porque el análisis de HTML es notoriamente permisivo: los navegadores renderizan marcado mal formado que parece inofensivo en un contexto y se ejecuta en otro, exactamente el tipo de comportamiento que ha producido evasiones reales de XSS contra filtros ingenuos desde que existe la entrada de texto enriquecido en la web.

Moderación de sección de comentarios

Una plataforma de blogs sanea cada comentario enviado antes de guardarlo, eliminando cualquier script o atributo de manejador de eventos que alguien intentó inyectar.

Campos de biografía y perfil de usuario

Una plataforma de comunidad sanea el HTML en las biografías de usuario, permitiendo negrita, enlaces y saltos de línea mientras bloquea cualquier contenido ejecutable.

Contenido de gestor de contenidos de colaboradores externos

Un medio de comunicación sanea el HTML enviado por redactores freelance antes de mostrarlo en el sitio en vivo, cerrando un vector de inyección común.

¿Elimina todos los vectores de XSS, incluidos los manejadores de eventos?

Sí, elimina etiquetas de script, enlaces javascript:, atributos de manejadores de eventos y otro contenido ejecutable, conservando solo etiquetas y atributos de formato seguro.

¿Sobrevive el formato seguro como negrita y enlaces?

Sí, las etiquetas de formato estándar y los atributos seguros se conservan por defecto, así que el texto enriquecido legítimo sigue mostrándose correctamente.

¿Es mejor que una lista negra de etiquetas hecha a mano?

Sí, funciona con una lista blanca de etiquetas y atributos conocidos como seguros en vez de intentar enumerar cada patrón peligroso, que es el enfoque que deja pasar vectores menos obvios.

¿Se guarda el HTML enviado después?

No, tanto el HTML enviado como el saneado se eliminan después del período de retención y nunca se usan para entrenamiento.

¿Qué pasa con un enlace que ejecuta un script?

El texto del enlace se conserva, pero su dirección peligrosa se elimina. En el ejemplo, un enlace que apuntaba a código vuelve como la palabra click sin destino, así que no se ejecuta nada cuando alguien lo pulsa.

Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.

POSThttps://api.kit.forhosting.com/data/html-sanitize

¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.

curl -X POST https://api.kit.forhosting.com/data/html-sanitize \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"html":"<p onclick='\''x()'\''>Hola</p><script>evil()</script>"}'
{
  "html": "<p onclick='x()'>Hola</p><script>evil()</script>"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "data.html_sanitize",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.

Por solicitud$0.002

Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.

max_mb25
HTTPCódigoSignificado
401unauthorizedAPI key ausente o inválida.
402insufficient_balanceEl saldo no cubre el precio de la tarea.
404unknown_typeEl tipo de tarea no existe.
429rate_limitedDemasiadas peticiones. Use el webhook en vez de sondear.

Este endpoint elimina el contenido ejecutable y los atributos peligrosos sin tocar el formato inofensivo que su usuario realmente quería.

El problema: el texto enriquecido también es una superficie de ataque

En el momento en que una aplicación permite a un usuario enviar HTML, o deja que un editor de texto enriquecido genere HTML, también abrió una puerta para un cross-site scripting almacenado: una etiqueta de script, un manejador onerror en una imagen rota, un enlace javascript: o un iframe apuntando a donde no debería. Bloquear a mano un puñado de nombres de etiqueta deja pasar vectores menos obvios, como atributos de manejadores de eventos, URIs de datos o payloads en SVG, y cada omisión es una vulnerabilidad real en producción. data.html_sanitize lo construye gente que sigue esa lista de vectores como oficio, para que su equipo no tenga que hacerlo.

Qué ocurre en cada solicitud

Envíe POST a /data/html-sanitize con el HTML sin confiar, y recibirá un task_id de inmediato mientras el saneo corre en segundo plano. El HTML limpio, con las etiquetas de formato seguro conservadas y los scripts y atributos peligrosos eliminados, llega mediante una llamada de webhook firmada o queda disponible en un enlace firmado válido por 24 horas.

Cómo encaja en un flujo automatizado

Los sistemas de comentarios, los visores de tickets de soporte, la ingesta de contenido de un gestor de contenidos y cualquier flujo que le muestre a otros usuarios HTML escrito por usuarios debería sanear al recibir, no confiar en que el framework del frontend escape correctamente al mostrar. Como la tarea se cobra por solicitud y nunca se cobra si falla, resulta lo bastante barata como para correr en cada envío individual en vez de muestrear o confiar en validación del lado del cliente, y el flujo asíncrono por webhook permite que un formulario de comentarios acepte la entrada de inmediato y reemplace el contenido por la versión saneada apenas esté lista, sin bloquear al usuario con un escaneo síncrono.

Tickets de soporte con texto enriquecido

Una mesa de ayuda sanea el HTML pegado en las respuestas de tickets para que los agentes vean mensajes con formato sin arriesgar un payload de XSS almacenado.

¿Cómo saneo HTML con la API?

Envíe el HTML sin confiar por POST a /data/html-sanitize, guarde el task_id devuelto y reciba el HTML limpio por webhook o mediante un enlace firmado válido por 24 horas.

¿Es gratis la API para sanear HTML?

No, no hay plan gratuito ni prueba; cuesta $0.002 por solicitud, y una solicitud fallida nunca se cobra.

¿Puedo sanear HTML por lote?

Sí, envíe una tarea asíncrona por documento y reciba cada resultado por webhook, algo ideal para importaciones masivas de contenido generado por usuarios.

¿Ya está disponible este endpoint?

Sí, data.html_sanitize está en producción y acepta solicitudes ahora mismo.

Ver la documentación completa del KIT →