Funcionamiento de la web
A estas alturas, todos usamos internet en mayor o menor medida. Esto es muy sencillo, simplemente abrimos nuestro navegador, y a través del buscador, obtenemos el resultado que queremos. Sencillo no? sin embargo, por detrás, hay un conjunto de reglas, protocolos y servicios funcionando constantemente. Los cuales son fundamentales para entender el funcionamiento de la web, ya que serán la base para todo tipo de práctica en entornos de desarrollo, administración de sistemas, redes, e incluso, el Pentesting.
Table of Contents
Toggle¿Qué es HTTP?
Si hablamos del funcionamiento de la web, tenemos que hacer mención del protocolo de transferencia de hipertexto (HTTP). Como su nombre lo indica, es el protocolo que usamos cada vez que visitamos un sitio web. Este fue desarrollado por Tim Berners – Lee y su equipo entre los años 1989 y 1991. También, podemos definir esta función como el conjunto de reglas utilizadas para comunicarse con servidores web (por ejemplo, Apache, Nginex, cloudflare, etc..) y así, generar una transmisión de datos cliente-servidorr. Estos datos pueden ser variados, por ejemplo si deseamos visitar un sitio web, el tipo de dato será HTML, si queremos descargar o ver contenido multimedia, los datos pueden ser imágenes, música, videos, etc..
Sin embargo, hoy en día para mayor seguridad, utilizamos el protocolo HTTPS, es decir, la versión segura de http. Con esta implementación, los datos se transmiten de forma encriptada, por lo que evita que alguna persona pueda interceptarlos y ver su contenido. Por tanto, esta función de seguridad, también nos da la seguridad de que estamos “hablando” con un servidor, y no con un tercero.
Peticiones y Respuestas
Cuando accedemos a un sitio web, nuestro navegador deberá realizar peticiones según la información que le especifiquemos, y en base a esto, obtener respuestas por parte del servidor. No obstante, primero se debe especificar cómo y dónde acceder a estos recursos. Para esto, utilizamos las URL.
¿Qué son las URL?
Las URL (Localizador Uniforme de Recursos), también llamados links, es aquella regla basada en partes que, desde nuestro navegador, le especificamos al servidor web todos los detalles de los recursos que deseamos obtener. Para un correcto funcionamiento de la web, estos se dividen en «Obligatorios» y «No obligatorios».
Para entender mejor esto, vamos a explicar cada uno con respecto a la siguiente imagen:
Obligatorios
(1) Esquema: Con esto le indicamos el protocolo que se va a usar para acceder a dicho recurso
(3) Host/Dominio: Nombre de dominio o dirección IP del servidor al cual deseamos acceder. Recordemos que el nombre de todo sitio web (dominio) es una dirección IP. Sin embargo, no a todos podemos acceder de esa manera.
No obligatorios
(2) Usuario: En algunos servicios, se requiere autenticación para poder acceder con nombre de usuario y contraseña a través de la URL, y así, iniciar sesión.
(4) Puerto: Aquí especificamos la puerta de entrada por la que queremos acceder a dicho dominio. Mencionamos en tópicos anteriores que, la cantidad de puertos varía de 1 a 65535. No obstante, los servidores web suelen utilizar el puerto 80 para HTTP y 443 para HTTPS.
(5) Ruta (path): Ubicación del archivo o recurso al cual intentamos acceder. Esto puede ser un contenido multimedia, una página o artículo. Por ejemplo, podemos acceder a la página https://lathack.com/blog o directamente a uno de los artículos que contiene dentro https://lathack.com/blog/malware.
(6) Cadena de consulta (query string): Estos hacen referencia a bits adicionales con los que podemos mencionar un artículo en particular a través de un número identificador.
(7) Fragmento: Por lo general se usa para sitios web cuyo contenido suele ser largo y tener cierta parte vinculada a ella. Por tanto, con esta etiqueta podemos ver el contenido tan pronto como accedamos y así, no perder tiempo buscando dicho contenido.
Métodos HTTP
Los métodos, o verbos HTTP, es la forma prevista por la cual el cliente puede mostrar su acción al realizar una petición al servidor.
Veamos una analogía para entender esto mejor:
Supongamos que vamos por la calle y vemos un amigo a lo lejos. Si queremos hablar con él y llamar su atención, primero debemos saludarlo. Es decir, primero lo llamamos por su nombre, segundo le decimos quienes somos, y tercero le damos la mano como señal de saludo. Algo normal no? En otras palabras, realizamos una “serie de procedimientos” para identificarnos, ser aceptados, y así, establecer una conversación.
Podemos suponer que ocurre algo similar en el funcionamiento de la web. Cuando enviamos una petición al servidor, no solo le decimos los recursos a los que deseamos acceder (url), sino también, nuestra identificación en la web (a través de los encabezados) y el método para obtener dicho recurso. En base a esto, es que podemos tener múltiples respuestas.
Existen muchos métodos o verbos HTTP. No obstante, haremos mención de los más usados:
Métodos más usados
GET: Este se utiliza para obtener una solicitud y/o información de un servidor web. Por ejemplo, cuando especificamos en la URL: «https://google.com» estamos enviando un método get.
POST: Lo usamos para enviar datos al servidor web y así crear nuevos registros. Un ejemplo de esto puede ser cuando nos registramos en un sitio web, o también, cuando especificamos una palabra o frase en el buscador. Por ejemplo, si en el buscador de Google colocamos “autos”, lo que hará el servidor será buscar en su base de datos todo lo relacionado con “autos” e imprimirlo en pantalla.
PUT: Con este método enviamos datos al servidor web, específicamente para actualizar la información.
DELETE: Es utilizado para eliminar información y/o registros de un servidor web.
Cabe mencionar que los métodos HTTP se usan en el encabezado de solicitud por parte del cliente, los cuales veremos en la sección de encabezados.
Códigos de estado HTTP
Podemos dividir dichos códigos en cinco categorías. A continuación estaremos explicando cada uno de ellos y los más conocidos dentro del funcionamiento de la web:
Respuesta a la Información
Del 100 al 199. Estos códigos, aunque no suelen ser muy comunes, se envían al cliente para avisarle que los datos han sido aceptados, y por tanto debe seguir enviando el resto de información
Éxito
Del 200 al 299. Este rango de código de estado le indica al cliente que si petición fue exitosa. Entre los mas conocidos podemos destacar:
200: Este código nos envía un “ok” haciéndonos saber que la petición se ha completado con éxito.
201: El servidor nos devuelve dicho código cuando se ha creado un nuevo recurso. Estos pueden ser desde un usuario hasta una entrada, o comentario, en un blog.
Redirección
Del 300 al 399. Se utiliza para redirigir al cliente hacia otro recurso. Este puede ser otra sección del sitio web, o incluso, otro sitio web. Entre los que podemos destacar:
301: Este códifo hace referencia a una “Redirección Permanete” ya que redirige la petición hacia otro sitio web o entrada.
302: Parecido al anterior, sin embargo este hace referencia a una “Redirección temporal”. Por lo tanto, solo realiza un cambio de forma temporal, el cual puede cambiar en cualquier momento.
Error del cliente
Del 400 al 499. Son utlizados para informar al cliente que ha habido un error en la petición enviada. Entre los que podemos destacar:
403: Código de estado “Forbidden”. Justamente lo que nos indica es que tenemos prohibido el acceso a dicho recurso.
404: Código “Not Found”. Lo que nos indica el servidor es, que algo hemos escrito mal en nuestra petición. O también, que el recurso al que queremos acceder no existe.
Servicio no disponible
Del 500 al 599. Estos tipos de códigos suelen representar un problema por parte del servidor. Generalmente se los atribuye a que no pueden manejar nuestra solicitud, o simplemente están sobrecargados. Algunos ejemplos de estos son:
500: El servidor nos devuelve “Error del servicio interno” cuando ha encontrado algún tipo de error en nuestra solicitud y no sabe como manejarlo.
503: El servidor nos devuelve “Servicio no disponible” cuando se encuentra inactivo (por ejemplo, por mantenimiento, cambios en el sitio, etc.) o sobrecargado.
Encabezados
Los encabezados son considerados bits adicionales en el funcionamiento de la web. Los cuales, son enviados desde nuestro navegador con cierta información “personal” hacia un servidor web. Si bien, no son obligatorios del todo, siempre se recomienda usarlos para no tener dificultad a la hora de visitar un sitio. A continuación explicaremos los mas comunes.
Podemos dividirlos en dos partes: Del lado del cliente y, del lado del servidor
Encabezados más comunes del cliente
Host: Aquí se coloca el dominio, o dirección IP, al cual queremos ingresar. Sin embargo, hay que tener en cuenta que algunos servidores alojan varios sitios web. Por lo tanto, podemos indicar cuál necesitamos, o recibir el sitio web predeterminado por el servidor.
User Agent: Este hace referencia al software de nuestro navegador (por ejemplo, Mozilla o Chrome) y a su número de versión.
Content-Length: Con este encabezado le hacemos saber el servidor cuántos datos esperar en la petición web. De esta forma, el servidor se puede asegurar que no falte ningún dato.
Accept-Encoding: Aquí le hacemos saber al servidor qué tipos de métodos de compresión usar, o admite el navegador, para así poder reducir los datos transmitidos a través de la red.
Cookie: Hay muchos tipos de cookies, e incluso subclases de las mismas, sin embargo el funcionamiento casi siempre es el mismo. Es decir, estas se utilizan para guardar información del usuario y enviársela al servidor para una mayor optimización del mismo.
En otras palabras, le ayuda al servidor a “recordar” al usuario. Con esto, solo debemos tener en cuenta que la mayoría de sitios web generan cookies, pero no todas las cookies tienen la misma finalidad. Con este tipo de encabezado el servidor puede saber el comportamiento de un usuario, como artículos en su carrito, ID de sesión, etc..
Encabezados más comunes del Servidor
Los siguientes encabezados, son enviados al cliente luego de que este haya realizado una petición.
Date : Indica la fecha en la que se realiza el response.
Server: Indica el tipo de servidor web
Set-Cookie: Información para almacenar. La cual, es devuelta al servidor web para cada solicitud.
Cache-Control: Este código, se refiere al tiempo de almacenamiento del contenido de la respuesta (memoria temporal) del navegador antes de volver a ser solicitado.
Content-Type: Aquí le hacemos saber al cliente qué tipo de dato se devuelven (HTML, imágenes, videos, pdf, etc.). Usando este encabezado el navegador sabe como procesar los datos
Content-Encoding: Método usado para comprimir los datos.
Teniendo todo esto en cuenta, veamos lo siguientes ejemplos:
Métodos y encabezados del lado del cliente (navegador). En este caso estamos realizando una petición a duckduckgo para acceder a su buscador:
Métodos y encabezados del lado del servidor. En este caso estamos recibiendo una respuesta por parte de duckduckgo, cuyo código de estado es 200.