Tema 1: Fundamentos de seguridad web e Integración de la aplicación web

Actividad 1

¿Qué es la Seguridad Web?

La seguridad web es el conjunto de medidas, prácticas, herramientas y protocolos diseñados para proteger sitios web, aplicaciones web y servicios en línea contra amenazas cibernéticas. Su objetivo es garantizar tres pilares fundamentales:

  • Confidencialidad: que solo los usuarios autorizados puedan acceder a la información.
  • Integridad: que los datos no sean alterados sin autorización.
  • Disponibilidad: que los servicios estén accesibles cuando se necesiten.

En el contexto de nuestra aplicación de Gestión de Eventos Universitarios, la seguridad web implica proteger los datos de los usuarios registrados (estudiantes, profesores, administradores), las credenciales de acceso, la información de los eventos y las inscripciones.

Tipos de Amenazas en Seguridad Web

  • Inyección SQL: El atacante introduce código SQL malicioso en formularios de entrada para acceder o manipular la base de datos MySQL. Ejemplo: en el formulario de login, se podría intentar ' OR 1=1 --.
  • Cross-Site Scripting (XSS): Inyección de scripts JavaScript en páginas web que son ejecutados por otros usuarios. Puede robar cookies de sesión o redirigir a sitios maliciosos.
  • Cross-Site Request Forgery (CSRF): Engaña al navegador del usuario para enviar solicitudes no autorizadas, como inscribir o eliminar eventos sin consentimiento.
  • Ataques de fuerza bruta: Intentos repetitivos de adivinar contraseñas probando miles de combinaciones.
  • Man-in-the-Middle (MITM): Interceptación de las comunicaciones entre el navegador y el servidor para capturar datos sensibles.
  • DDoS: Saturación del servidor con tráfico masivo para dejarlo inaccesible.

Herramientas y Mecanismos de Control de Seguridad

Herramienta / MecanismoDescripciónAplicación en el Proyecto
Helmet.jsMiddleware de Express que configura headers HTTP de seguridadProtege contra XSS, clickjacking y sniffing de MIME type
CORSControl de acceso de origen cruzado (Cross-Origin Resource Sharing)Restringe qué dominios pueden acceder a la API
Rate LimitingLimita el número de solicitudes por IP en un período de tiempoPreviene ataques de fuerza bruta en el login
Input ValidationValidación y sanitización de datos de entradaPreviene inyección SQL y XSS en formularios
Prepared StatementsConsultas parametrizadas a la base de datosPreviene inyección SQL en consultas MySQL
CSRF TokensTokens únicos por sesión para verificar solicitudes legítimasProtege acciones como inscripción y creación de eventos
WAF (Firewall)Filtra tráfico malicioso antes de llegar a la aplicaciónProtección a nivel de servidor/hosting

Tema 2: Mecanismos de encriptación y control de acceso

Actividad 2

Herramientas y Mecanismos de Control de Seguridad en la Aplicación

En la aplicación de Gestión de Eventos Universitarios se implementan los siguientes mecanismos:

  • bcrypt: Librería para el hashing de contraseñas. Aplica un salt aleatorio y múltiples rondas de cifrado, haciendo computacionalmente costoso descifrar las contraseñas.
  • express-validator: Middleware para validar y sanitizar datos de entrada en el servidor, previniendo datos malformados o inyecciones.
  • jsonwebtoken (JWT): Genera tokens firmados digitalmente para manejar sesiones sin estado (stateless) entre el frontend y el backend.
  • express-rate-limit: Middleware que limita intentos de login a 5 por cada 15 minutos por IP.

Tipos de Encriptación de Datos

TipoAlgoritmoUso en el ProyectoCaracterísticas
Hash (unidireccional) bcrypt Almacenamiento de contraseñas No se puede revertir. Salt aleatorio. Factor de costo configurable.
Simétrica AES-256 Cifrado de datos sensibles en BD Misma clave para cifrar y descifrar. Rápido y eficiente.
Asimétrica RSA / ECDSA Certificados SSL/TLS (HTTPS) Par de claves pública/privada. Base del HTTPS.
Firma digital HMAC-SHA256 Firma de tokens JWT Verifica integridad y autenticidad del token.

Métodos de Identificación y Autenticación

  1. Autenticación basada en contraseña: El usuario proporciona email + contraseña. La contraseña se compara contra el hash almacenado en MySQL usando bcrypt.
  2. Autenticación basada en tokens (JWT):
    • El usuario se autentica con credenciales
    • El servidor genera un JWT firmado con la clave secreta
    • El cliente almacena el token y lo envía en cada solicitud (header Authorization: Bearer <token>)
    • El servidor verifica la firma del token antes de procesar la solicitud
  3. Autorización por roles (RBAC):
    • admin: Crear, editar y eliminar eventos. Gestionar usuarios e inscripciones.
    • profesor: Crear y editar sus propios eventos.
    • estudiante: Inscribirse y cancelar inscripciones a eventos.

Tema 3: Certificados de seguridad web

Actividad 3

¿Qué es un Certificado de Seguridad?

Un certificado de seguridad SSL/TLS es un archivo digital que:

  • Vincula una clave criptográfica con la identidad de una organización o dominio.
  • Habilita el protocolo HTTPS (HTTP sobre TLS).
  • Cifra la comunicación entre el navegador del usuario y el servidor.
  • Muestra el candado de seguridad en la barra de direcciones del navegador.

Tipos de Certificados SSL/TLS

TipoValidaciónCostoUso RecomendadoTiempo de Emisión
DV (Domain Validation) Solo verifica propiedad del dominio Gratis (Let's Encrypt) o bajo costo Blogs, sitios personales, proyectos académicos Minutos
OV (Organization Validation) Verifica dominio + organización $50 - $200 USD/año Sitios corporativos, portales institucionales 1-3 días
EV (Extended Validation) Verificación exhaustiva de la organización $100 - $500+ USD/año Bancos, e-commerce, gobierno 1-2 semanas
Wildcard Cubre dominio + todos los subdominios $50 - $300 USD/año Sitios con múltiples subdominios Variable
Multi-Domain (SAN) Cubre múltiples dominios diferentes $100 - $400 USD/año Organizaciones con varios dominios Variable

Certificado utilizado en el proyecto

Para la aplicación de Gestión de Eventos Universitarios desplegada en eventosuniversitarios.eventyplanner.com, se utiliza:

Let's Encrypt — Certificado DV gratuito
  • Justificación: Al ser un proyecto académico, un certificado DV es suficiente para cifrar las comunicaciones y proteger los datos de los usuarios.
  • Renovación: Automática cada 90 días mediante Certbot o el panel de Hostinger.
  • Protocolo: TLS 1.3 con cipher suites modernas.
  • Compatibilidad: Compatible con todos los navegadores modernos.

Tema 4: Despliegue de aplicaciones en el servidor

Actividad 4

Servicios, Accesos y Permisos del Servidor en Producción

ServicioDescripciónPuerto
Apache/NginxServidor web que sirve los archivos HTML, CSS y JS80 (HTTP) / 443 (HTTPS)
Node.jsRuntime del backend (Express API)3000 (interno)
MySQLBase de datos relacional3306 (solo local/interno)
SSHAcceso remoto seguro al servidor65002 (personalizado)
SFTPTransferencia segura de archivos65002 (sobre SSH)

Permisos del servidor

  • Archivos: 644 (lectura para todos, escritura solo el propietario)
  • Directorios: 755 (lectura y ejecución para todos, escritura solo el propietario)
  • Archivos .env: 600 (solo lectura/escritura para el propietario)
  • MySQL: Acceso solo desde localhost (127.0.0.1), sin acceso remoto

Proceso de Despliegue al Servidor de Producción

La secuencia de pasos para desplegar la aplicación:

  1. Preparación del entorno local:
    • Verificar que la aplicación funciona correctamente en desarrollo
    • Ejecutar pruebas unitarias y de integración
    • Compilar/minificar assets (CSS, JS) para producción
  2. Configuración del servidor:
    • Crear el subdominio en el panel de Hostinger
    • Configurar el virtual host de Apache/Nginx
    • Instalar Node.js y MySQL en el servidor
    • Configurar las variables de entorno (.env)
  3. Transferencia de archivos:
    • Conectar al servidor via SFTP (puerto 65002)
    • Subir los archivos al directorio del subdominio
    • Verificar permisos de archivos y directorios
  4. Configuración de base de datos:
    • Crear la base de datos MySQL en el servidor
    • Ejecutar las migraciones para crear las tablas
    • Cargar datos iniciales (seeders)
  5. Instalación del certificado SSL:
    • Activar Let's Encrypt desde el panel de Hostinger
    • Verificar que HTTPS funciona correctamente
    • Configurar redirección automática HTTP → HTTPS
  6. Verificación y pruebas:
    • Verificar que la aplicación carga correctamente
    • Probar registro, login, creación de eventos e inscripciones
    • Verificar el certificado SSL con herramientas como SSL Labs

Protocolo de Transferencia de Archivos: SFTP

Se seleccionó SFTP (SSH File Transfer Protocol) por las siguientes razones:

  • Seguridad: Toda la transferencia de archivos se cifra mediante SSH, protegiendo las credenciales y los archivos en tránsito.
  • Autenticación: Utiliza las mismas credenciales SSH del servidor (usuario + contraseña o clave pública/privada).
  • Puerto único: Opera sobre el mismo puerto que SSH (65002), simplificando la configuración del firewall.
  • Integridad: Verifica automáticamente que los archivos transferidos no se corrompan durante el envío.
  • Herramientas: Compatible con FileZilla, WinSCP, y clientes de línea de comandos.
Nota: Nunca se debe usar FTP sin cifrar, ya que las credenciales y archivos se transmiten en texto plano y pueden ser interceptados.

Servicios de Autenticación y Autorización Implementados

La aplicación implementa un sistema completo de autenticación y autorización:

  1. Registro de usuario: Formulario con validación (nombre, email, contraseña). La contraseña se hashea con bcrypt (10 salt rounds) antes de almacenarla en MySQL.
  2. Login: Verifica email y compara el hash de la contraseña. Si es correcto, genera un JWT con expiración de 24 horas.
  3. Middleware de autenticación: Verifica el JWT en cada solicitud protegida. Rechaza tokens expirados o inválidos con HTTP 401.
  4. Middleware de autorización: Verifica el rol del usuario (admin, profesor, estudiante) y permite o deniega el acceso según los permisos requeridos (HTTP 403).
  5. Protección de rutas:
    • Rutas públicas: ver eventos, registro, login
    • Rutas autenticadas: inscribirse, ver mis inscripciones
    • Rutas admin: crear/editar/eliminar eventos, gestionar usuarios