Parte: 0 — Fundamentos y prerrequisitos · Fuente: RFC 9110 (HTTP Semantics) / MDN Web Docs ⏱️ Duración estimada: 110 min · Nivel: Fundamentos
Dominar el protocolo sobre el que corre la web y, con él, la mayor parte de la superficie de ataque moderna. Al terminar entenderás la anatomía de peticiones y respuestas HTTP, la semántica de métodos y códigos de estado, el papel de las cabeceras, cómo cookies y sesiones simulan estado sobre un protocolo que no lo tiene, y cómo HTTPS y TLS añaden confidencialidad, integridad y autenticación al canal. Este es el idioma que hablan navegadores, APIs y atacantes por igual.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Modelo petición/respuesta | La base de toda interacción web |
| 2 | Métodos HTTP | GET, POST, PUT, DELETE y su semántica |
| 3 | Códigos de estado | 2xx/3xx/4xx/5xx diagnostican todo |
| 4 | Cabeceras | Control, seguridad y contexto |
| 5 | Cookies y sesiones | Estado sobre un protocolo sin estado |
| 6 | HTTPS/TLS | Confidencialidad, integridad y autenticación |
| 7 | Cabeceras de seguridad | HSTS, CSP y compañía |
| 8 | HTTP/2 y HTTP/3 | La web moderna sobre TCP y QUIC |
HTTP es, en su forma clásica (HTTP/1.1), un protocolo de texto sorprendentemente legible. El cliente abre una conexión TCP y envía una petición con tres partes: una línea inicial (método, ruta y versión), un bloque de cabeceras (Host, User-Agent, Cookie...) y, opcionalmente, un cuerpo. El servidor responde con una línea de estado (versión y código), sus propias cabeceras y el cuerpo con el contenido. La propiedad definitoria es que HTTP es sin estado: cada petición se procesa de forma independiente, sin memoria de las anteriores. Toda la ilusión de "estar logueado" se construye artificialmente sobre esta base, y ahí reside buena parte de la superficie de ataque web.
Los métodos son verbos que declaran la intención de la petición. GET recupera un recurso y debe ser seguro (no modifica estado) e idempotente (repetirlo no cambia nada); POST envía datos y puede crear o alterar estado; PUT reemplaza un recurso completo de forma idempotente; DELETE lo elimina. Respetar esta semántica no es cosmético: cachés, proxies y crawlers asumen que un GET es seguro, de modo que exponer una acción destructiva bajo GET es un fallo de diseño con consecuencias reales (un rastreador podría borrar datos al indexar).
Los códigos de estado son el primer diagnóstico de cualquier interacción, agrupados por su primer dígito. La siguiente tabla condensa la lógica de cada familia.
| Familia | Significado | Ejemplos representativos |
|---|---|---|
| 2xx | Éxito | 200 OK, 201 Created, 204 No Content |
| 3xx | Redirección | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx | Error del cliente | 400, 401 (no autenticado), 403 (prohibido), 404, 429 (demasiadas peticiones) |
| 5xx | Error del servidor | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
La distinción entre 401 y 403 es una fuente eterna de confusión y merece precisión: 401 significa "no sé quién eres, autentícate", mientras que 403 significa "sé quién eres, pero no tienes permiso". Confundirlas en una API filtra información sobre la existencia de recursos.
Como HTTP no recuerda nada, el servidor necesita un mecanismo para reconocer al mismo usuario entre peticiones. La solución clásica es la cookie: en la respuesta al login, el servidor incluye una cabecera Set-Cookie con un identificador de sesión; el navegador la guarda y la reenvía automáticamente en cada petición al mismo dominio. Ese identificador es, en la práctica, la llave de la sesión, y protegerlo es crítico. Tres atributos lo blindan: HttpOnly impide que JavaScript lo lea (mitiga el robo por XSS), Secure obliga a enviarlo solo por HTTPS (evita su captura en claro), y SameSite restringe su envío en peticiones de origen cruzado (mitiga el CSRF). Una cookie de sesión sin estos atributos es una invitación abierta al secuestro de sesión.
HTTPS no es un protocolo aparte: es HTTP transportado sobre TLS. TLS envuelve la conexión y aporta tres garantías. Confidencialidad: el tráfico va cifrado, así que un observador de la red ve destino y volumen, pero no el contenido. Integridad: cualquier manipulación en tránsito se detecta. Autenticación: mediante certificados firmados por una autoridad de certificación (CA), el cliente verifica que habla con el servidor legítimo y no con un impostor. El establecimiento de la conexión (handshake TLS) negocia la versión del protocolo y el conjunto de cifrado, valida el certificado del servidor y deriva las claves de sesión. Es esencial tener claro el límite: TLS protege el canal, no la aplicación. Una web con HTTPS impecable puede seguir siendo vulnerable a inyección SQL, XSS o fallos de lógica de negocio; el candado del navegador certifica el transporte, no la calidad del código.
Sobre HTTPS se apilan cabeceras de seguridad que instruyen al navegador para reducir riesgos. HSTS (Strict-Transport-Security) fuerza al navegador a usar siempre HTTPS con ese dominio, cerrando la ventana del downgrade a HTTP. CSP (Content-Security-Policy) declara de qué orígenes puede cargarse script, estilo o imagen, siendo una de las defensas más potentes contra XSS. Otras como X-Content-Type-Options, X-Frame-Options o Referrer-Policy cierran vectores concretos. En paralelo, el protocolo ha evolucionado sin cambiar su semántica: HTTP/2 multiplexa muchas peticiones en una sola conexión TCP para eliminar el bloqueo en cabeza de línea, y HTTP/3 corre sobre QUIC (sobre UDP) reduciendo la latencia de establecimiento y sobreviviendo mejor a los cambios de red. Los métodos y códigos que aprendes aquí siguen siendo idénticos en las tres versiones.
HttpOnly, Secure y SameSite determinan su resistencia a XSS, captura en claro y CSRF.| Término | Definición concisa |
|---|---|
| HTTP | Protocolo de aplicación sin estado para transferir recursos web. |
| HTTPS | HTTP transportado sobre TLS: canal cifrado y autenticado. |
| TLS | Protocolo que cifra, autentica y protege la integridad del canal. |
| Método | Verbo HTTP que declara la acción sobre un recurso. |
| Idempotente | Operación que repetida produce el mismo efecto que una sola vez. |
| Código de estado | Número que resume el resultado de una respuesta HTTP. |
| Cabecera | Par clave-valor con metadatos de una petición o respuesta. |
| Cookie | Dato guardado por el navegador y reenviado al servidor. |
| Sesión | Asociación de peticiones al mismo usuario autenticado. |
| HttpOnly | Atributo que impide a JavaScript leer una cookie. |
| SameSite | Atributo que limita el envío de cookies entre orígenes. |
| Certificado | Documento firmado por una CA que prueba la identidad del servidor. |
| CA | Autoridad de certificación que firma certificados de confianza. |
| HSTS | Cabecera que fuerza el uso de HTTPS en un dominio. |
| CSP | Cabecera que restringe orígenes de recursos para mitigar XSS. |
| QUIC | Transporte sobre UDP que sustenta HTTP/3 y reduce latencia. |
Usa curl para lanzar peticiones crudas y leer cabeceras, el navegador con sus DevTools (pestaña Network) para inspeccionar tráfico real, y un proxy de interceptación como Burp Suite Community o OWASP ZAP para capturar, modificar y reenviar peticiones. Para examinar TLS, openssl s_client muestra el certificado y la negociación. Practica siempre contra una aplicación de laboratorio (DVWA o un servidor propio), nunca contra sitios ajenos sin permiso. Antes de interceptar HTTPS con Burp o ZAP, instala su certificado CA en el navegador; sin ese paso, el navegador rechazará el tráfico interceptado.
bash
curl -v http://10.10.10.6/ 2>&1 | head -40
bash
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://10.10.10.6/login
HttpOnly, Secure y SameSite?bash
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates
bash
curl -sI https://example.com | grep -iE 'strict-transport|content-security'
⚠️ Nota ética: la interceptación y manipulación de tráfico web se realiza solo contra aplicaciones propias o con autorización explícita. Usar un proxy contra sitios de terceros sin permiso es ilegal.
Content-Security-Policy y escribe un ejemplo que mitigue XSS.Usando un proxy de interceptación, captura el flujo completo de autenticación de una app de laboratorio: la petición de login, la respuesta que establece la cookie de sesión y una petición autenticada posterior. Documenta las cabeceras de seguridad presentes y ausentes, y propón mejoras concretas.
Criterio de aceptación: la evidencia muestra la cookie de sesión con sus atributos reales, e identificas correctamente al menos dos cabeceras de seguridad faltantes (por ejemplo HSTS, CSP o SameSite) con una recomendación concreta para cada una. El procedimiento es reproducible contra la misma app.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Burp no intercepta HTTPS | Falta instalar el certificado CA de Burp en el navegador. Impórtalo y confía en él. |
curl da error de certificado |
Certificado autofirmado en el laboratorio. Usa -k solo en laboratorio, nunca en producción. |
| La cookie no se envía en las peticiones | Atributo SameSite/Secure o dominio/ruta incorrectos. Revisa el scope de la cookie. |
| 405 Method Not Allowed | El recurso no admite ese método. Comprueba la definición de la API. |
| HTTP/2 no aparece en la captura | Se negocia por ALPN dentro de TLS. Usa herramientas que soporten HTTP/2. |
| El login funciona pero se pierde la sesión | La cookie no se guarda o se bloquea por SameSite. Revisa dominio, ruta y atributos. |
❓ ¿HTTPS hace segura mi aplicación? No: cifra y autentica el canal, pero no protege contra fallos de la aplicación (inyección, XSS, lógica de negocio). Es necesario pero no suficiente.
❓ ¿Por qué HTTP es "sin estado" si existen las sesiones? El protocolo no recuerda peticiones anteriores; las cookies y los tokens simulan estado guardándolo en el cliente o en el servidor y reenviándolo en cada petición.
❓ ¿Qué cambia con HTTP/2 y HTTP/3? HTTP/2 multiplexa varias peticiones en una conexión TCP; HTTP/3 corre sobre QUIC (UDP) reduciendo latencia y resistiendo cambios de red. La semántica (métodos, estados, cabeceras) se mantiene idéntica.
❓ ¿Burp o ZAP? Ambos interceptan y modifican tráfico. Burp es el estándar profesional con una edición Community limitada; ZAP es open source y completamente gratuito. Para aprender, cualquiera de los dos sirve.
Clase 012 — DNS, DHCP y ARP: funcionamiento y riesgos