Checklist de seguridad para lanzar una nueva web en producción
Lanzar una web en producción implica mucho más que subir archivos al servidor. Antes de hacerla pública, es fundamental asegurar cada capa del proyecto: servidor, aplicación, base de datos y dependencias. A continuación encontrarás un checklist de seguridad completo para garantizar que tu nueva web sea estable, segura y esté lista para recibir tráfico real.
1) Configuración del servidor
- Actualiza el sistema operativo: aplica los últimos parches de seguridad antes del despliegue.
- Desactiva acceso root directo: crea un usuario con permisos limitados y usa
sudopara tareas administrativas. - Configura un firewall: bloquea todos los puertos excepto los necesarios (80, 443, SSH).
- Usa claves SSH: evita contraseñas para el acceso al servidor y desactiva el login por password en
sshd_config. - Instala Fail2Ban o UFW: protege contra intentos de fuerza bruta en SSH o paneles de administración.
- Configura backups automáticos: haz copias diarias y guarda una versión fuera del servidor.
2) HTTPS y certificados SSL
- Instala y configura un certificado SSL (Let’s Encrypt, Cloudflare, etc.).
- Redirige todo el tráfico HTTP a HTTPS con un
301permanente. - Activa HTTP Strict Transport Security (HSTS) para forzar conexiones seguras.
- Verifica que no existan recursos mixtos (HTTP dentro de páginas HTTPS).
3) Configuración del entorno (ENV)
- Nunca subas archivos .env o credenciales al repositorio.
- Usa variables de entorno para contraseñas, claves API y configuraciones sensibles.
- Establece permisos mínimos (600) al archivo
.env. - Verifica que el entorno de producción no use
APP_DEBUG=true.
4) Seguridad de la aplicación
- Escapa y valida todos los inputs: protege contra XSS, CSRF y SQL Injection.
- Utiliza un Content Security Policy (CSP) para restringir recursos externos.
- Implementa límites de carga en formularios y subida de archivos.
- Oculta mensajes de error: no muestres trazas o rutas del sistema al usuario final.
- Deshabilita listados de directorios en el servidor web (Nginx/Apache).
- Usa cabeceras de seguridad:
X-Content-Type-Options: nosniffX-Frame-Options: SAMEORIGINReferrer-Policy: no-referrer-when-downgrade
5) Gestión de usuarios y autenticación
- Obliga contraseñas seguras (mínimo 10 caracteres, mezcla de letras, números y símbolos).
- Usa bcrypt o Argon2 para almacenar contraseñas.
- Activa la verificación en dos pasos (2FA) para usuarios con permisos de administración.
- Implementa expiración de sesiones y tokens JWT cortos.
- Registra los intentos de inicio de sesión y bloquea temporalmente tras varios fallos.
6) Seguridad en la base de datos
- Usa un usuario con permisos mínimos: evita conectar con el root de la base de datos.
- Restringe el acceso externo: solo permite conexiones desde el servidor web o la red interna.
- Cifra las conexiones con TLS (por ejemplo, en PostgreSQL o MySQL).
- Haz copias automáticas y periódicas de la base de datos.
- Elimina tablas o datos de prueba antes del despliegue final.
7) Dependencias y librerías
- Ejecuta análisis de vulnerabilidades (ej.
npm audit,composer audit). - Actualiza todas las dependencias a sus versiones estables.
- Usa un lock file (
package-lock.json,composer.lock) para mantener versiones fijas. - Evita paquetes de origen dudoso o sin mantenimiento activo.
8) Logs y monitoreo
- Centraliza logs de errores y accesos (ej. con Papertrail, LogDNA, o Elastic Stack).
- Filtra datos sensibles en los logs (tokens, contraseñas, correos).
- Configura alertas para errores críticos o picos de tráfico inusuales.
- Monitorea uptime y rendimiento con herramientas como UptimeRobot, Pingdom o Grafana.
9) Seguridad del front-end
- Minifica y firma los archivos JS/CSS.
- Deshabilita el acceso directo al código fuente de mapas (
source maps) en producción. - Evita almacenar datos sensibles en
localStorageosessionStorage. - Usa
Subresource Integrity (SRI)en recursos externos (CDNs). - Protege formularios con reCAPTCHA o equivalentes.
10) Copias de seguridad y recuperación
- Realiza backups diarios automáticos (archivos + base de datos).
- Prueba el proceso de restauración regularmente.
- Guarda copias en ubicaciones externas (S3, Google Cloud, servidores remotos).
- Encripta los backups antes de almacenarlos.
11) Test final antes del lanzamiento
- Ejecuta un escaneo de seguridad con OWASP ZAP o Burp Suite.
- Verifica los permisos de archivos y directorios (
644y755). - Desactiva entornos de prueba o staging accesibles públicamente.
- Comprueba que los correos y formularios usan dominios verificados (DKIM/SPF).
- Usa herramientas como SecurityHeaders.com o SSL Labs para validar tu configuración.
Conclusión
Un lanzamiento seguro no es un evento único, sino un proceso continuo. Mantén tu web monitorizada, revisa vulnerabilidades periódicamente y aplica parches de seguridad sin demora. Con este checklist tendrás una base sólida para minimizar riesgos y ofrecer una experiencia confiable a tus usuarios.
#SeguridadWeb #Ciberseguridad #DevOps #Producción #WebDevelopment #Infraestructura #OWASP #SSL #Backups #Firewall