Glosario
Qué es .env: qué pasa cuando se filtra un archivo de entorno
.env reúne los secretos de una app (credenciales de BD, claves de API, claves de cifrado) en un solo archivo. Por qué es el archivo más peligroso, qué desbloquea cada secreto filtrado, dónde colocarlo y cómo protegerlo en git y mediante rotación, con una autocomprobación.
.env es comodísimo y casi todos los frameworks modernos lo usan. Pero colócalo en el sitio equivocado una sola vez y es como clavar tu llavero en la puerta de entrada. Aquí tienes qué es y cómo protegerlo, desde cero.
Un poco más de detalle
Las apps tienen "valores que cambian por entorno" y "valores que no quieres que nadie vea": la contraseña de la BD, las claves de API externas, la clave que cifra las sesiones. Si las codificas a fuego en el código fuente, los secretos se filtran en el momento en que compartes el código.
Así que las reúnes en un único archivo .env y las lees como "variables de entorno" desde el código. Next.js, Laravel, Rails y muchos frameworks funcionan así.
Por qué es el "archivo más peligroso"
Porque varias claves están en un solo archivo, una única exposición propaga el daño rápido. Enumerar "qué desbloquea cada valor filtrado" deja clara la gravedad.
| Valor filtrado | Qué pasa |
|---|---|
| Credenciales de BD | leer / alterar / borrar datos |
| Claves de API externa | uso suplantando identidad, facturación fraudulenta |
Clave de cifrado (p. ej. APP_KEY de Laravel, claves de firma) | falsificación de sesiones, inicio de sesión suplantado |
| Secretos de OAuth | secuestro de las apps vinculadas |
De hecho, exponer .env es un incidente clásico. → El .env expuesto a todo el mundo
La filtración típica = un error de colocación
La causa principal es "poner toda la app en el directorio público (docroot)". Donde solo debería servirse public/, exponer su carpeta superior hace que .env también sea alcanzable.
✗ Peligroso (la app en la raíz pública)
public_html/ ├─ .env ← ¡legible! ├─ app/ └─ public/
✓ Seguro (la app fuera, solo public servido)
app-root/ ├─ .env ← inalcanzable ├─ app/ └─ public_html/ → public/
Cómo protegerlo
No lo pongas en un directorio público
Mantén la app fuera del docroot; sirve solo public/. Pasos concretos para hosting compartido: esta guía.
No lo subas a git
Añade .env* a .gitignore y comparte solo un .env.example con valores vacíos.
Rota todo si se filtra
No solo la clave confirmada: reemplaza todas las claves que estaban en .env. Actúa como si todas se hubieran visto.
Autocompruébalo con regularidad
Adquiere el hábito de comprobar que /.env no se puede abrir en tu propio sitio.
Autocomprobación (solo contra dominios que poseas)
# Un 200 con cuerpo significa que está expuesto. 403/404 está bien por ahora.
curl -sI https://tudominio/.env | head -1
curl -sI https://tudominio/.git/config | head -1Comprobar esto en cada despliegue detecta los errores de colocación a tiempo.
Sigue leyendo
FAQ
Q¿Puedo subir .env a git?
No. Añade .env a .gitignore. En su lugar, sube un .env.example con valores vacíos para compartir qué claves hacen falta.
QSi se filtra aunque sea un secreto de .env, ¿qué roto?
No solo el que confirmaste: rota todas las claves que estaban en .env. Prioridad: secretos de API externa / OAuth → claves de cifrado → correo → BD. Actúa como si todas se hubieran visto.
Q¿Cómo compruebo si .env se filtró?
Abre https://tudominio/.env en un navegador. Si se muestra el contenido, está expuesto (200 con cuerpo = mal). Si está bloqueado (403/404), por ahora estás bien.