El Cross-Site Scripting (XSS) es una de las vulnerabilidades más comunes en aplicaciones web. Consiste en la inyección de código malicioso, normalmente JavaScript, dentro de una página web vista por otros usuarios.
El atacante aprovecha un fallo en la validación de entradas o en la sanitización del contenido para lograr que su script se ejecute en el navegador de la víctima. Esto puede llevar al robo de información, manipulación de la página o incluso al control total de la sesión del usuario.
¿Cómo funciona un ataque XSS?
- El atacante introduce código malicioso en un campo de entrada o en una URL.
- La aplicación vulnerable no filtra ni escapa correctamente ese contenido.
- El navegador de la víctima interpreta ese código como si fuera legítimo.
- El script se ejecuta con los mismos permisos que el usuario en la web.
Ejemplo básico de inyección:
<input type="text" value="<script>alert('Hackeado');</script>">
Si el servidor no valida ni escapa la entrada, ese <script> puede ejecutarse en la página de la víctima.
Tipos de XSS
XSS almacenado (Stored XSS)
- El código malicioso se guarda en el servidor (por ejemplo, en un comentario o publicación).
- Cada vez que otro usuario carga esa página, el script se ejecuta.
- Es el más peligroso.
XSS reflejado (Reflected XSS)
- El script malicioso viaja en la URL o en un formulario.
- Se ejecuta cuando la víctima hace clic en un enlace manipulado.
- Común en ataques de phishing.
XSS basado en DOM
- El fallo está en el propio JavaScript de la página.
- El script malicioso modifica el DOM del navegador sin necesidad de interacción con el servidor.
Ejemplos de lo que un atacante puede hacer con XSS
- Robar cookies de sesión para suplantar al usuario.
- Mostrar formularios falsos y robar contraseñas (phishing).
- Redirigir al usuario a una página maliciosa.
- Modificar la apariencia de la web (defacement).
- Instalar malware a través de descargas automáticas.
Cómo prevenir el XSS
Escapar siempre las salidas
- Usar funciones seguras para mostrar datos del usuario en HTML.
- Ejemplo: convertir
<script>en<script>.
Validar y sanitizar entradas
- No confiar en lo que envía el usuario.
- Aceptar solo los formatos esperados (por ejemplo, números, emails, etc.).
Content Security Policy (CSP)
- Configurar una política que limite la ejecución de scripts solo a fuentes autorizadas.
Usar librerías o frameworks seguros
- Twig, React, Angular y otros frameworks modernos escapan automáticamente el HTML.
Evitar innerHTML inseguro en JavaScript
- Preferir métodos como
textContento plantillas seguras.
Conclusión
El Cross-Site Scripting (XSS) es una vulnerabilidad peligrosa que permite a un atacante ejecutar código en el navegador de las víctimas. Aunque es muy común, también es fácil de prevenir si se siguen buenas prácticas de seguridad: validar entradas, escapar salidas y usar configuraciones modernas como CSP.
En resumen, la clave está en no confiar nunca en los datos que provienen del usuario.

Deja una respuesta