> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/appweb-for-juniors/fundamentos-de-aplicaciones-web.md).

# Fundamentos de Aplicaciones Web

Un aplicativo web es un programa de software que se ejecuta en un servidor web y es accesible a través de un navegador utilizando Internet o una intranet. A diferencia de las aplicaciones de escritorio, los aplicativos web no requieren instalación en el dispositivo del usuario, lo que facilita su acceso desde cualquier lugar con una conexión a Internet.

## <mark style="color:green;">**Evolución de los Aplicativos Web**</mark>

### <mark style="color:green;">**Aplicativos Web Antiguos**</mark>

Los primeros aplicativos web eran bastante simples y limitados en funcionalidad. Estaban principalmente basados en HTML estático con algo de contenido dinámico generado por CGI (Common Gateway Interface) scripts. Los lenguajes de programación utilizados incluían Perl y C.

* <mark style="color:green;">**HTML y CGI**</mark><mark style="color:green;">:</mark> Los primeros sitios web usaban HTML para la estructura y CGI scripts para manejar las interacciones del usuario.
* <mark style="color:green;">**Perl y C**</mark><mark style="color:green;">:</mark> Lenguajes comunes para escribir CGI scripts.

### <mark style="color:green;">**Aplicativos Web Modernos**</mark>

La evolución de los aplicativos web ha llevado al desarrollo de aplicaciones más interactivas y dinámicas, gracias a tecnologías como AJAX (Asynchronous JavaScript and XML) y el uso de frameworks avanzados.

* <mark style="color:green;">**AJAX**</mark><mark style="color:green;">:</mark> Permite la actualización de partes de la página web sin recargarla completamente, mejorando la experiencia del usuario.
* <mark style="color:green;">**Frameworks Modernos**</mark><mark style="color:green;">:</mark> Angular, ReactJS y Vue.js son ejemplos de frameworks que permiten desarrollar aplicaciones web modernas y dinámicas.

## <mark style="color:green;">**Lenguajes de Programación Relacionados**</mark>

Los aplicativos web utilizan una variedad de lenguajes de programación, tanto del lado del servidor como del cliente.

* <mark style="color:green;">**Lado del Cliente**</mark><mark style="color:green;">:</mark> HTML, CSS, JavaScript, TypeScript.
* <mark style="color:green;">**Lado del Servidor**</mark><mark style="color:green;">:</mark> PHP, Python, Ruby, Java, C#, Node.js.

## <mark style="color:green;">**Comparación: Aplicativos Web Antiguos vs. Modernos**</mark>

### **Aplicativos Web Antiguos**

* <mark style="color:green;">**Tecnologías**</mark><mark style="color:green;">:</mark> HTML, CGI, Perl, C.
* <mark style="color:green;">**Características**</mark><mark style="color:green;">:</mark> Páginas estáticas con poca interactividad, recarga completa de la página para actualizaciones.
* <mark style="color:green;">**Bases de Datos**</mark><mark style="color:green;">:</mark> Uso limitado y simple de bases de datos, principalmente para almacenamiento básico.

### <mark style="color:green;">**Aplicativos Web Modernos**</mark>

* <mark style="color:green;">**Tecnologías**</mark><mark style="color:green;">:</mark> Angular, ReactJS, Vue.js, Node.js.
* <mark style="color:green;">**Características**</mark><mark style="color:green;">:</mark> Páginas altamente interactivas y dinámicas, actualizaciones parciales de la página, experiencia de usuario mejorada.
* <mark style="color:green;">**Bases de Datos**</mark><mark style="color:green;">:</mark> Integración profunda con bases de datos relacionales y NoSQL para manejar grandes volúmenes de datos y consultas complejas.

## <mark style="color:green;">**Relación de las Aplicaciones Web con las Bases de Datos**</mark>

Las aplicaciones web modernas dependen en gran medida de las bases de datos para almacenar y gestionar la información. La interacción entre las aplicaciones web y las bases de datos es fundamental para proporcionar funcionalidades como autenticación de usuarios, gestión de contenido y transacciones comerciales.

* <mark style="color:green;">**Bases de Datos Relacionales (SQL)**</mark><mark style="color:green;">:</mark> MySQL, PostgreSQL, Oracle.
* <mark style="color:green;">**Bases de Datos NoSQL**</mark><mark style="color:green;">:</mark> MongoDB, Cassandra, CouchDB.

La conexión entre una aplicación web y su base de datos suele manejarse mediante APIs y ORM (Object-Relational Mapping), lo que facilita la interacción y la manipulación de datos.

## <mark style="color:green;">**OWASP Top Ten**</mark>

El OWASP (Open Web Application Security Project) Top Ten es una lista de las diez vulnerabilidades más críticas en aplicaciones web. Es una guía fundamental para entender y mitigar los riesgos de seguridad en el desarrollo de aplicaciones web.

1. <mark style="color:green;">**Inyección**</mark><mark style="color:green;">:</mark> Incluye SQL, NoSQL, OS y LDAP injection.
2. <mark style="color:green;">**Autenticación Rota**</mark><mark style="color:green;">:</mark> Problemas con la autenticación y gestión de sesiones.
3. <mark style="color:green;">**Exposición de Datos Sensibles**</mark><mark style="color:green;">:</mark> Manejo inadecuado de información confidencial.
4. <mark style="color:green;">**Entidades Externas XML (XXE)**</mark><mark style="color:green;">:</mark> Vulnerabilidades en el procesamiento de XML.
5. <mark style="color:green;">**Control de Acceso Roto**</mark><mark style="color:green;">:</mark> Falta de controles adecuados para restringir el acceso.
6. <mark style="color:green;">**Configuración Incorrecta de Seguridad**</mark><mark style="color:green;">:</mark> Configuraciones predeterminadas inseguras y fallos en actualizaciones.
7. <mark style="color:green;">**Cross-Site Scripting (XSS)**</mark><mark style="color:green;">:</mark> Ejecución de scripts maliciosos en el navegador del usuario.
8. <mark style="color:green;">**Deserialización Insegura**</mark><mark style="color:green;">:</mark> Problemas en la deserialización de datos.
9. <mark style="color:green;">**Uso de Componentes con Vulnerabilidades Conocidas**</mark><mark style="color:green;">:</mark> Dependencias de librerías y frameworks vulnerables.
10. <mark style="color:green;">**Registro y Monitoreo Insuficientes**</mark><mark style="color:green;">:</mark> Falta de registros y monitoreo adecuados para detectar y responder a incidentes.
