Prevenir XSS y malas prácticas comunes

Aprende a prevenir XSS, fugas de datos y errores de validación en frontend con prácticas defendibles en producción.

La seguridad frontend empieza en cómo renderizas y validas datos.

XSS y inyecciones aparecen cuando asumes que el input es fiable.

Defensa en profundidad: validación, escape, CSP y revisión de dependencias.

Meta: reducir superficie de ataque en interfaces JavaScript.

  • El riesgo aparece al renderizar datos sin sanitizar.
  • Nunca insertes input de usuario con `innerHTML` sin sanitizado.
  • Prefiere `textContent` para contenido textual.
  • Valida en cliente y vuelve a validar en servidor.
  • Configura CSP como capa adicional.

XSS: dónde nace y cómo se evita

El riesgo aparece al renderizar datos sin sanitizar.

  • Nunca insertes input de usuario con `innerHTML` sin sanitizado.
  • Prefiere `textContent` para contenido textual.
  • Valida en cliente y vuelve a validar en servidor.
  • Configura CSP como capa adicional.

Patrón de render seguro en JS

Escapar salida reduce superficie de ataque.

Dependencias y supply chain

Una librería vulnerable también es tu vulnerabilidad.

  • Revisa advisories (`npm audit`).
  • Evita paquetes sin mantenimiento activo.
  • Fija versiones en lockfile.
  • Actualiza con pruebas, no a ciegas.

Checklist mínimo antes de release

No publiques sin esta revisión.

  • Entradas validadas y saneadas.
  • No secrets en frontend.
  • Headers y CSP definidos.
  • Dependencias críticas revisadas.
JavaScript
46

Prevenir XSS y malas prácticas comunes

Aprende a prevenir XSS, fugas de datos y errores de validación en frontend con prácticas defendibles en producción.

Código del tema: sanitize | escape | CSP | input validation

📘 Teoría

XSS: dónde nace y cómo se evita

El riesgo aparece al renderizar datos sin sanitizar.

  • Nunca insertes input de usuario con `innerHTML` sin sanitizado.
  • Prefiere `textContent` para contenido textual.
  • Valida en cliente y vuelve a validar en servidor.
  • Configura CSP como capa adicional.

Patrón de render seguro en JS

Escapar salida reduce superficie de ataque.

Render seguro con textContent
const li = document.createElement('li');
li.textContent = userComment;
commentsList.append(li);

Dependencias y supply chain

Una librería vulnerable también es tu vulnerabilidad.

  • Revisa advisories (`npm audit`).
  • Evita paquetes sin mantenimiento activo.
  • Fija versiones en lockfile.
  • Actualiza con pruebas, no a ciegas.

Checklist mínimo antes de release

No publiques sin esta revisión.

  • Entradas validadas y saneadas.
  • No secrets en frontend.
  • Headers y CSP definidos.
  • Dependencias críticas revisadas.

🧪 Aprende probando

Ejemplo Ejemplo guiado: de `innerHTML` a render seguro Transforma un render vulnerable en uno seguro.

🏁 Retos

Reto Reto: validar formulario antes de enviar Bloquea envío si email o password no cumplen reglas mínimas.

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .