XUT_ / COURSES / PRE SECURITY

How Web Servers Work

¿Qué es un servidor web?

Un servidor web es un software escuchando el tráfico entrante que después utiliza HTTP para responder contenido web a los clientes. Los más comunes son Apache, Nginx, IIS y NodeJS. Todos devuelven archivos desde lo que se conoce como root directory, o directorio raíz. Por ejemplo, Nginx y Apache comparten la misma ruta por defecto: /var/www/html en los sistemas operativos Linux y IIS usa C:\inetpub\wwwroot para los sistemas operativos Windows. Así, si pediste http://www.ejemplo.com/foto,jpg, te devolvería /var/www/html/foto.jpg del disco duro local.


Hosts virtuales

Los servidores web pueden albergar múltiples sitios web con diferentes dominios. Para conseguir esto usan virtual hosts (archivos de configuración basados en texto).El software del servidor web comprueba el nombre siendo pedido por HTTP. Si encuentra una correspondencia, la página web pedida se mostrará. Si no, se mostrará la página por defecto.

Los virtual hosts pueden tener su directorio raíz mapeado en diferentes lugares del disco duro, por ejemplo, one.com mapeado a /var/www/html/website_one y two.com mapeado a /var/www/html/website_two. No hay límite para el número de páginas que puedes hostear en un solo servidor.


Contenido estático vs dinámico

El contenido estático nunca cambia, como JS, CSS, imágenes, etc. También incluye al HTML que no cambia. Por el otro lado el contenidod dinámico si que cambia dependiendo de las peticiones. Como la búsqueda en la web por palabras, o mostrar las últimas entradas de un blog.

Los cambios que acabamos viendo se hacen en el Backend con el uso de leguajes de scripting. Se llama así porque se hace detrás de la escena. Todo lo que vemos en el buscador es Frontend.


Lenguajes de scripting y backend

No hay mucho límite en cuanto a lo que el Backend puede conseguir y es esto lo que hace que una página sea interactiva para el usuario. Algunos ejemplos de esto son: PHP, Python, Ruby, NodeJS, Perl... Estos lenguajes pueden interactuar con bases de datos, llamar a servicios externos, procesar informació del usuario... Un ejemplo sería si hicieras una petición al sitio web: http://ejemplo.com/index.php?name=adam

Si el index.php estuviera construido así:

php
<html>
	<body>
		Hello <?php echo $_GET["name"]; ?>
	</body>
</html>

Aparecería el siguiente resultado:

html
<html>
	<body>
		Hello adam
	</body>
</html>

Notarás que el cliente realmente no ve el PHP, porque este es un lenguaje de Backend. Esta interactividad abre muchos problemas de seguridad para las aplicaciones web que no han sido creadas seguramente o sanitizadas.