Para: desarrolladores independientes y pequeños operadores que no tienen claro "cuánto es el mínimo" en seguridad. Aquí no hay pasos de ataque — solo los controles básicos considerados estándar del sector, en orden de prioridad. Cada elemento enlaza a un artículo más profundo, así que puedes empezar aquí y leer solo lo que necesites.
La visión de este sitio: no 'hacerlo todo' sino 'completar en este orden'
Una persona sola o un equipo pequeño no puede hacerlo todo a la vez — que es justo por lo que el orden es lo que más importa. Si la capa superior (cuentas de administración, dominio y correo) queda tomada, todo control por debajo deja de tener sentido (el atacante lo restablece todo como si fuera tú). Avanza desde la capa más importante hacia abajo y reducirás al máximo tu probabilidad de incidente para el tiempo que tienes. Este artículo está escrito no como conocimiento exhaustivo sino como una lista para decidir rápidamente qué completar a continuación.
Nivel 0 — cuentas de administración, dominio, correo
MFA · dominio · DNS · correo · pago
Nivel 1 — secretos y código
secretos fuera de git · detección pre-commit · separación/rotación de claves
Nivel 2 — la propia app
validación de entrada · auth/sesión · TLS/encabezados · autenticación de correo
Nivel 3 — parchear, detectar, recuperar
CVE de dependencias · actualizaciones del SO · SSH/FW · registros · copias de seguridad
Nivel 0: protege las cuentas de administración, el dominio y el correo (primero)
Esta es la premisa para todo lo demás. Si toman tu dominio, correo o panel de hosting, todos los demás controles quedan anulados. El atacante restablece contraseñas como si fuera tú, reescribe el DNS, entra a tu servidor. Así que esto es lo que blindas primero.
Pon MFA resistente al phishing
Protege el correo con más rigor que nada
Guarda los códigos de recuperación y respaldo con seguridad
Separa cuentas para reducir puntos únicos de fallo
Nivel 1: no filtres secretos ni código
El incidente fundacional de este sitio, y muchos en el mundo real, vienen de un hueco aquí: secretos como archivos .env y claves de API colándose en el código o en un repositorio público.
Mantén los secretos fuera del código y de la documentación
.env y exclúyelas de git (.gitignore). No escribirlas en absoluto es el control más fuerte.Detén los secretos por máquina antes del commit
Si se filtró, asume que se filtró TODO — rota todo
Acota los tokens estrictamente y mantenlos de corta vida
¿Autoalojas Git? Precaución extra
Autoalojar porque te asusta el "público accidental" de GitHub no elimina el commit accidental. Sin nada del bloqueo de secretos integrado de GitHub, un hook de secretos pre-commit es obligatorio en el autoalojamiento. Ver Git autoalojado vs GitHub: cuál es más seguro.
Nivel 2: endurece la propia app
El mínimo para la aplicación web que expones. El objetivo no es detener ataques novedosos sino corregir las vulnerabilidades comunes y bien conocidas. Este sitio reformula cada uno como defensa en sus páginas de glosario.
Nunca confíes en la entrada (previene las vulnerabilidades comunes)
Acierta con auth, sesión y acceso
Haz que TLS y los encabezados de seguridad cuenten
Previene la suplantación de correo
Nivel 3: parchear, detectar, recuperar
La base para "mantener el daño pequeño y recuperar rápido incluso tras una brecha". El monitoreo de dependencias como osv-scanner vive aquí.
Monitorea por máquina los CVE de dependencias de forma continua
Actualiza automáticamente el SO y el servidor
Endurece SSH y el cortafuegos
Usa el privilegio mínimo para limitar hasta dónde se extiende una brecha
Copias de seguridad 3-2-1 + una restauración probada
Conserva registros para poder notar anomalías
Por dónde empezar
"Todo, ya mismo" no es realista. Compara el orden que la gente tiende a tomar con el que recomienda este sitio.
El orden que la gente tiende a tomar (ineficiente)
- empezar con trabajo llamativo de vulnerabilidades de aplicación
- dejar el MFA en "luego" indefinidamente
- tener copias de seguridad pero nunca haber probado una restauración
- los secretos están en
.envpero no hay hook de detección
El orden que recomienda este sitio
- Nivel 0: asegura primero con MFA las cuentas de administración, el correo y el dominio
- Nivel 1: detén estructuralmente las fugas de secretos (detección pre-commit + política de rotar todo)
- Nivel 2: corrige las vulnerabilidades comunes de la app
- Nivel 3: llega a "recuperable" con monitoreo de dependencias, actualizaciones y copias con restauración probada
Este sitio también se defiende en este orden
Este sitio aplica esta misma base a sí mismo: la app y la base de datos en contenedores separados, la base de datos solo en una red interna (limitando el alcance del impacto en la capa de contenedor/red) / una clave distinta por servidor / secretos nunca en git ni en documentación / monitoreo de CVE de dependencias antes de cada despliegue y a diario / copias de seguridad externas a un servidor aparte / solicitudes externas a través de un límite de seguridad. Un sitio que enseña seguridad no puede dejar vulnerabilidades en su propia configuración, así que ejecutamos este orden de prioridad sobre nosotros mismos primero. Nuestro incidente fundacional, también, no vino de un ataque novedoso sino de que faltaba un único control básico. Por eso seguimos diciéndolo: lo básico antes del trabajo llamativo.
Sigue leyendo
- Versión para organización / equipo: la base de seguridad para organizaciones medianas y grandes
- Autoalojamiento: Git autoalojado vs GitHub: cuál es más seguro
- Dependencias: instalar y usar osv-scanner · no quedarse atrás con los CVE
- Secretos: archivos .env y secretos · incidente una clave filtrada y facturada por fraude
- Herramientas: comprobación de encabezados de seguridad · comprobador de autenticación de correo · consulta de CVE/KEV
- Framework: seguridad por framework (una vez firme la base, cierra los fallos por defecto de tu tecnología)
- Cabeceras: las cabeceras de seguridad no son una lista para acumular (incluidas las que hay que quitar)
- La visión general: los errores habituales son fallos de suposición (cuatro creencias que fallan una y otra vez)