FASE 01
Acceso y entrada los básicos
Quién entra y qué le deja escribir. Son los que más se olvidan porque "la app ya funciona".
01Autenticación robusta
Correo y contraseña solos ya no alcanzan. Active la verificación en dos pasos desde el primer día y, si puede, deje entrar con Google o Apple.
02Las claves de API fuera del navegador
Nunca ponga
OPENAI_API_KEYni ninguna clave en el frontend. Si se ve en las herramientas del navegador, ya es de cualquiera. Van en variables de entorno del servidor.03Contraseñas con Argon2id
Nada de MD5 ni SHA-256 para contraseñas. Argon2id es el estándar actual y es lento a propósito, para que adivinarlas por fuerza bruta no valga la pena.
04Validación en el servidor, siempre
La validación del formulario es solo para que se vea bonito. Cualquiera se la salta mandando la petición directo. Todo se vuelve a validar en el backend.
05Protección contra XSS
Si muestra texto que escribió un usuario, límpielo antes (por ejemplo con
DOMPurify). Si no, alguien le mete un<script>que le roba las sesiones a sus usuarios.06Registro de actividad sospechosa
Guarde los intentos fallidos de entrar, los accesos al panel de administración y los cambios de contraseña. Si algo raro pasa a las 3 de la mañana, usted se tiene que enterar.
07Consultas parametrizadas
Nunca arme la consulta pegando texto:
"... WHERE id = " + id. Use parámetros. Así se cierra la puerta a la inyección SQL.08Protección CSRF
Un token único en cada formulario. Sin eso, otra página puede hacer que su usuario con sesión abierta borre su cuenta sin darse cuenta.
FASE 02
Datos y configuración los del medio
Cómo viaja la información y qué deja abierto el servidor.
09HTTPS obligatorio
Sin certificado todo viaja en texto plano. Let's Encrypt es gratis y se renueva solo.
10Cookies de sesión seguras
Márquelas con
HttpOnly,SecureySameSite. Así un script malicioso no las puede leer.11Límite de intentos
Ponga un tope de intentos de inicio de sesión por IP (por ejemplo, 5 por minuto). Sin eso, prueban contraseñas hasta que una entra.
12CORS cerrado
Nada de
Access-Control-Allow-Origin: *. Permita solo el dominio de su frontend.13Encabezados de seguridad
Content-Security-Policy,Strict-Transport-SecurityyX-Frame-Options. Son pocas líneas y cierran varios ataques comunes de una.14Enlaces de recuperación que vencen
El enlace de "olvidé mi contraseña" debe durar poco (15 minutos está bien) y servir una sola vez.
15Límites al subir archivos
Tamaño máximo, solo los tipos que necesita y nunca ejecutables. Si no, le suben un
.phpy se toman el servidor.16Pagos verificados en el servidor
Nunca cobre el precio que manda el navegador. El backend recalcula el total antes de cobrar.
17Modo debug apagado en producción
Con
DEBUG=truelos errores muestran rutas, versiones y a veces claves. Es regalarle el mapa a quien lo quiera atacar.18Dependencias al día
Corra
npm audit(o una herramienta como Snyk) cada semana. Hay bots buscando librerías viejas con fallas conocidas.19Archivos de configuración escondidos
Compruebe que
.env,.gity los respaldos no se puedan abrir desde el navegador. Pruebesudominio.com/.env: tiene que dar error.
FASE 03
Mantenimiento los finales
La seguridad no se instala una vez: se revisa.
20Secretos borrados del historial de Git
Si alguna vez subió una clave a GitHub y luego la borró, sigue en el historial. Límpielo con
git filter-repoo BFG, y revise congitleaks.21Revocar la clave que se filtró
Si cree que una clave se filtró, no espere: revóquela en OpenAI, AWS o Cloudflare y genere una nueva. Borrarla del código no basta.
22Auditoría completa
Pase la app por OWASP ZAP o use el prompt de auditoría que está al final de esta guía.
23Informe de vulnerabilidades
Un documento con lo que encontró, qué tan grave es, cómo se arregla y la fecha de la prueba. Es lo que piden los clientes grandes.
24Respaldo cifrado… y probado
Tener respaldo no sirve si nunca probó restaurarlo. Hágalo una vez y salga de la duda.
25Panel de administración cerrado
La ruta
/adminno puede estar abierta para todos. Exige rol de administrador, revisado en el servidor.26Ojo con cada librería nueva
Cada
npm installmete código de un desconocido. Antes de instalar, mire quién la mantiene y si de verdad la necesita.27Probar que el arreglo sí funcionó
¿Arregló un XSS? Vuelva a intentar el ataque. Si no lo comprobó, no está arreglado.
Si tiene poco tiempo
Empiece por estos cuatro
- Las claves de API fuera del frontend (02).
- Validación en el servidor (04).
- HTTPS y contraseñas con Argon2id (09 y 03).
- Límite de intentos en el inicio de sesión (11).
Con eso tapa los huecos por los que más se meten. Después siga con el resto, de a pedacitos.
Prompt para auditar con IA
Que la IA revise lo que hizo la IA
Péguelo en Claude o ChatGPT junto con el código de su proyecto.
La IA le hace una app que funciona. Que no se la roben ya es cosa suya.
Así nomasito. Un abrazo.
Sígame en Instagram para más