Guías de seguridad
Fundamentos de seguridad: qué es lo realmente peligroso de .env y las claves de API
Un primer paso para desarrolladores indie que oyen una y otra vez «la seguridad importa» pero no saben por dónde empezar. Qué es .env, qué pasa cuando se filtra una clave de API (con un diagrama de flujo), y los cuatro hábitos mínimos que puedes hacer hoy — explicado con claridad, sin miedo, manos a la obra.
«Oigo una y otra vez que la seguridad importa, pero ¿por dónde empiezo siquiera?» Este es el primerísimo paso para desarrolladores indie. No para asustarte — solo cosas sobre las que puedes actuar hoy, en orden.
Por qué empezar por los «secretos»
La mayoría de los incidentes reales empiezan no con ataques sofisticados sino con un secreto filtrado. Los dos casos sobre los que se construye este sitio fueron ambos fugas de secretos:
Protege tus secretos y previenes la mayoría de los incidentes comunes. Por eso empezamos aquí.
Qué es .env (en 30 segundos)
.env es un archivo que reúne los valores secretos de tu app: la contraseña de la base de datos, las claves de API externas, la clave que cifra las sesiones. Como las claves están juntas en un solo archivo, una fuga las derrama todas a la vez — así que es el archivo que proteger primero (→ Glosario: qué es .env).
Qué significa la fuga de una clave de API
Una clave de API es «una copia de la llave para usar un servicio como si fueras tú». En las manos equivocadas, encadena así.
Las claves robadas a menudo se revenden y se abusan con retraso — «al principio no pasa nada, luego una factura sorpresa» es el patrón clásico. Así que «después de que lo notes» es demasiado tarde; el punto es no filtrarlas en primer lugar.
Cuatro hábitos para empezar hoy
Nada difícil. Solo estos cuatro.
No la expongas
Nunca pongas .env ni el cuerpo de la app en un directorio visible en la web (la raíz web). Expón solo public/. Pasos concretos para hosting compartido: esta guía.
No le hagas commit
Añade .env* a .gitignore (permite !.env.example); comparte solo un ejemplo sin valores. Una vez con commit es recuperable del historial, así que mantenlo fuera desde el inicio.
Rota todo si se filtra
No solo una clave — rota cada secreto que pudiera haberse filtrado. Orden: API externa / OAuth → claves de cifrado → correo → BD. Actúa como si las hubieran visto.
Autocomprueba
De vez en cuando confirma que /.env no se puede abrir desde fuera (abajo).
Autocomprobación (solo contra dominios que posees)
# Un 200 con cuerpo significa que está expuesto. 403/404 está bien por ahora.
curl -sI https://tu-dominio/.env | head -1
curl -sI https://tu-dominio/.git/config | head -1Comprobar esto en cada despliegue detecta a tiempo los errores de ubicación.
Errores comunes vs el primer paso correcto
Común
- «Funciona», así que dejas
.envjusto bajo public - «Lo borro luego», así que haces commit de
.envuna vez - Rotar solo la única clave de la que viste abuso
El primer paso correcto
- Cuerpo de la app fuera de la raíz web, exponer solo
public/ - Excluir
.envvía.gitignoredesde el inicio - Si se filtra, rotar cada secreto del entorno
Siguientes pasos
A partir de aquí, los siguientes temas son «los valores por defecto arriesgados de tu stack» y «un sistema para no quedarse atrás con los CVE publicados». Sin prisa, uno a uno.
Leer a continuación
- Glosario: qué es .env · qué es un CVE · qué es un RCE
- Defensa: mantén .env fuera de la web pública · higiene de CVE en Next.js
- Incidente: una clave de API robada facturada de forma fraudulenta
- Incidente: una clave robada hizo que banearan la cuenta
FAQ
Q¿Por dónde empiezo con la seguridad?
Por no filtrar tus secretos (.env y claves de API). La mayoría de los incidentes reales empiezan ahí. No las expongas, no les hagas commit en git, rota todo si se filtran, y autocomprueba de vez en cuando — eso previene la mayoría.
Q¿Qué pasa concretamente si se filtra una clave de API?
Alguien puede actuar como tú frente a un servicio externo. Los desenlaces comunes son facturación fraudulenta (uso intensivo cargado a ti) y lectura/escritura de tus datos. Las claves robadas a menudo se revenden y se abusan con retraso.
Q¿Puedo poner .env en git?
No. Añade .env* a .gitignore y comparte solo un .env.example sin valores. Una vez con commit, puede recuperarse del historial de git aunque lo borres después.