Protocolos HTTP, MIME y Seguridad en Servidores Web

1. Funcionamiento del Protocolo HTTP

El funcionamiento de HTTP se basa en el envío de mensajes. Su mecanismo es el siguiente:

  1. El usuario especifica en el navegador la dirección de la página que quiere consultar.
  2. El cliente web decodifica la información de la URL, diferenciando el protocolo de acceso, la IP, el DNS, etc.
  3. El cliente web establece una conexión con el servidor web y solicita la página.
  4. Si no hay ningún error, el servidor envía la página y el cliente web interpreta el código HTML recibido.
  5. Se cierra la conexión.

HTTP es un protocolo sin estado, no recuerda nada relativo a conexiones anteriores a la actual. Cuando el cliente web solicita un documento HTML pueden ocurrir dos cosas: si el servidor lo encuentra, lo envía; y si no lo encuentra, manda un código de error. Para cada objeto que se transfiere por la red se realiza una conexión independiente. Imágenes y texto HTML son conexiones separadas. Para resolver situaciones de falta de memoria, además de almacenarse información de la sesión actual, se utilizan cookies.

2. Tipos MIME

Los tipos MIME (Multipurpose Internet Mail Extensions) son un estándar que especifica cómo debe transferir un programa los archivos multimedia (video, sonido, etc.). MIME adjunta un archivo de cabecera a los documentos en el que indica el tipo de contenido del archivo; así, el servidor web y el navegador pueden manejar y mostrar los datos correctamente.

Los MIME indican el tipo de archivo que se transfiere del servidor web al cliente o navegador. Se componen de tipos y subtipos:

  • text/html: define todos los archivos de texto que contienen código HTML.
  • video/mpeg: define todos los archivos de video almacenados en formato MPEG.
  • image/*: define todos los archivos de imagen almacenados en cualquier formato.

El protocolo HTTP usa los tipos MIME en sus cabeceras para:

  • Informar al cliente del tipo de datos que recibe del servidor con el encabezado Content-Type.
  • Permitir la negociación de contenido. El cliente, en su petición, incluye los tipos MIME que acepta.
  • Encapsular una o más entidades dentro del cuerpo de los mensajes mediante los tipos MIME multipart.

Los tipos MIME se pueden referenciar desde tres lugares:

  • Desde el servidor
  • Desde la página web
  • Desde el navegador web

3. Servidores Web y Clientes Web

3.1. Servidores Web

El servidor web atiende peticiones recibidas de los navegadores o clientes web y debe hacerlo de forma eficiente y segura. El servidor web, además de suministrar páginas web HTML que no cambian, también permite la ejecución de pequeños programas en diferentes lenguajes que les proporcionan dinamismo. Los tres elementos básicos que componen las peticiones web dinámicas son: el cliente que la hace, el servidor que la atiende y los datos solicitados.

Para que el navegador llegue al servidor web, este debe tener asignada una dirección IP única que identifique al equipo en la red. Cuando el navegador hace una petición a un servidor web utiliza un nombre de dominio que identifica al servidor; este nombre pasa a un servidor DNS que devuelve la IP correspondiente.

La información que el usuario proporciona al navegador para conectar con un servidor web se llama URL, que identifica la forma de acceder a un recurso utilizando un protocolo de comunicación. La URL se compone de:

  • Protocolo que debe utilizarse
  • La doble barra con dos puntos (//)
  • El servidor, indicado por el nombre o por la IP
  • La ruta al recurso
  • El recurso al que se quiere acceder

3.2. Clientes Web

El cliente o navegador web es una aplicación que permite visualizar páginas web alojadas en servidores web, interpretar código HTML mostrando el contenido de la página en la pantalla e interactuar con ella o navegar a través de enlaces a otras páginas web.

Los contenidos web pueden ser de diferentes tipos, su reproducción o visualización requiere otros complementos que son añadidos al navegador y quedan integrados de forma transparente al usuario. Además de este funcionamiento básico, es posible ejecutar aplicaciones complementarias que aumentan la funcionalidad de la página web. Algunos ejemplos:

  • Aplicaciones que se ejecutan en el cliente web, es decir, en el equipo del usuario. El servidor envía el código en Java al navegador y este lo ejecuta. Para ejecutarlo a la perfección hay que tener Java actualizado.
  • Aplicaciones que se ejecutan en el servidor y generan un código HTML que se envía al navegador, que interpreta y muestra al usuario.

4. Configuración y Autenticación en Apache

4.1. Configuración Global en Apache

Desde la pestaña de configuración global:

  • En Redes y Direcciones se configura la red a la que se da servicio y el puerto de escucha.
  • En Tipos MIME se aprecia un listado completo de los tipos disponibles a partir del archivo /etc/mime.types.
  • Usuarios y Grupos permite decidir quién será el usuario por defecto de Apache y el grupo al que pertenecerá.
  • En Varios permite configurar algunos detalles como la información que se visualizará en la cabecera HTTP del servidor, el nombre y la ruta completa del archivo de bloqueo.
  • En Archivos de Opciones de por-Directorio el usuario puede crear archivos con opciones específicas para un determinado directorio.
  • En Configure Apache Modules muestra un listado con todos los módulos disponibles para Apache donde se especifica cuáles están instalados.

4.2. Autenticación en Apache

Cuando el servidor Apache recibe la petición de una página web, realiza tres pasos:

  1. Autenticación:
    • Básica o simple: es cuando el usuario en el navegador web introduce su login o nombre de usuario y contraseña, y se envían al servidor sin cifrar.
    • Digest: el usuario introduce en el navegador su usuario y contraseña, y se envían cifrados al servidor.
  2. Autorización: Control de acceso que establece y controla las máquinas que tienen acceso a un recurso independientemente del usuario que accede.

5. Sugerencias de Seguridad para Apache2

  • Determinar cuáles son los módulos que deben estar activados y desactivar el resto.
  • El servidor debe revelar la menor cantidad posible de información sobre sí mismo.
  • El administrador debe ser el propietario de los directorios de configuración.
  • El archivo ejecutable apache2 tiene permisos 755 por defecto y hay que pasarlo a 700 para que solo root pueda ejecutarlo.
  • Deben controlarse los datos que están disponibles.
  • Los archivos y directorios que contienen información general del servidor incluidos en el directorio dado en la directiva DocumentRoot deberán tener permiso de lectura para el grupo que ejecuta los procesos.
  • La autenticación de usuarios y grupos deberá realizarse a través de una serie de archivos que deben estar fuera del árbol de directorios de documentos, y solo con permisos de lectura para el usuario que ejecuta apache2 en el servidor.
  • Hay que estar informado de las posibles vulnerabilidades detectadas en apache2.

6. Protocolo SSL y HTTPS

El protocolo SSL (Secure Sockets Layer) permite establecer una comunicación segura y codificada entre el servidor web y el navegador. Trabaja conjuntamente con el protocolo HTTP creando un protocolo de transmisión de hipertexto seguro llamado HTTPS.

El protocolo HTTPS se basa en dos tipos de criptografía: simétrica y asimétrica. El protocolo SSL garantiza que todo el intercambio de información realizado en una sesión de conexión se hace de forma segura mediante encriptación. En una conexión TCP/IP proporciona las siguientes garantías:

  1. Confidencialidad: cifra la información transferida.
  2. Integridad del mensaje: controla cualquier modificación en la información mientras se transmite por Internet.
  3. Autenticación del servidor: asegura la identidad del servidor.
  4. Autenticación del cliente: el servidor conoce la identidad del usuario y le permite o no su acceso a áreas protegidas.

La comunicación se realiza en dos fases:

  1. Fase de saludo
  2. Fase de comunicación