¿Qué es la secuencia de comandos entre sitios?

Una de las clases de vulnerabilidad más común en los sitios web se llama "Cross-Site Scripting" o "XSS". Las vulnerabilidades XSS son aquellas en las que un usuario puede ejecutar JavaScript. Existen varias variantes de vulnerabilidades XSS, con distintos grados de gravedad.
El problema de que un atacante pueda ejecutar JavaScript en las sesiones de otros usuarios es que entonces es posible que el atacante haga cualquier cosa en el sitio web que ven las víctimas. Esto incluye redirigir a las víctimas a sitios web externos, robar tokens de autenticación y rastrear los detalles de pago.
La forma más grave de vulnerabilidad XSS es la secuencia de comandos entre sitios "almacenada" o "persistente". Aquí es posible que un atacante cree una carga útil XSS y luego la envíe para guardarla en la base de datos. Con un exploit XSS guardado en la base de datos, es posible influir en otros usuarios durante un período de tiempo prolongado.
¿Cuál es la vulnerabilidad de Shellshock?Otra forma de Cross-Site Scripting es "Reflection", este tipo no se guarda en ningún momento, sino que la carga útil se incluye en el navegador. Normalmente, este tipo de XSS forma parte de los ataques de phishing, en los que un atacante intenta engañar a una víctima para que haga clic en un enlace malicioso.
Por lo general, la mayoría de los ataques XSS tienen la carga útil enviada al servidor en algún momento, pero algunos ataques son puramente del lado del cliente, nunca se envían al servidor y, en cambio, solo afectan a JavaScript del lado del cliente. Esto se denomina XSS basado en DOM, ya que permanece en el modelo de objetos de documento de JavaScript, o DOM. Este tipo de vulnerabilidad es particularmente difícil de identificar y corregir porque el servidor nunca detecta las vulnerabilidades y, por lo tanto, no se pueden registrar.
Históricamente, la técnica de prevención de vulnerabilidades XSS ha consistido en filtrar todos los datos enviados por los usuarios, utilizando listas de bloqueo para rechazar cualquier mensaje con caracteres o palabras importantes en JavaScript. Esto tendía a conducir a una carrera armamentista para encontrar desvíos para el filtro, al tiempo que evitaba algunas solicitudes legítimas de los usuarios. La solución correcta es utilizar entidades html para codificar los datos enviados por los usuarios. con los formularios de entidad HTML habilitados, los caracteres se codifican automáticamente en un formato en el que el navegador sabe que los muestra como símbolos correctos pero no los trata como código.