Súbor .env je verejne dostupný
Čo to je
Súbor .env je v koreni vášho webu (https://example.cz/.env) voľne prístupný. Keď si ho niekto stiahne, dostane všetko, čo je v ňom uložené.
Prečo je to problém
.env pravidelne obsahuje:
- Heslo k databáze (
DB_PASSWORD) - API kľúče — Stripe, Mailgun, AWS, OpenAI
- JWT secret používaný na podpisovanie prihlasovacích tokenov
- SMTP prihlasovacie údaje na odosielanie e-mailov
Keď útočník získa tieto hodnoty, je spravidla game over. Stiahne si databázu, podpíše si JWT s admin právami, pošle phishing cez váš SMTP. Nepotrebuje exploitovať vôbec nič v aplikácii.
Toto je najčastejší „hlúpy fail“, ktorého si všímame. Väčšinou sa stane, keď sa aplikácia deployuje cezgit pullpriamo dopublic_htmla nikoho nenapadlo, že.envtiež lezie do webroot.
Ako to opraviť
Krok 1 — okamžite zablokovať prístup
nginx:
location ~ /\.env {
deny all;
return 404;
}Apache (.htaccess v root):
<Files ".env">
Require all denied
</Files>Po nasadení overte: curl -I https://example.cz/.env — má vrátiť 403 alebo 404.
Krok 2 — ROTOVAŤ všetky secrets, ktoré tam boli
Ak bol .env verejne dostupný čo i len chvíľu, predpokladajte, že ho už niekto má. Vygenerujte nové:
- Heslo k databáze.
- Všetky API kľúče (Stripe, Mailgun, atď. — v ich administráciách ako „rotate“ / „revoke“).
- JWT secret (po výmene sa všetci prihlásení používatelia budú musieť znova prihlásiť — je to v poriadku).
- SMTP heslo.
Krok 3 — presunúť .env mimo webroot
Dlhodobo patrí .env nad úroveň public_html. Aplikácia ho číta z absolútnej cesty, web server sa k nemu nikdy nedostane.
/var/www/example.cz/
├── app/
│ └── .env ← tu
└── public_html/ ← document root
└── index.phpKrok 4 — skontrolujte git history
Ak bol .env niekedy commitnutý do gitu, je v histórii navždy. Použite BFG Repo-Cleaner alebo git filter-repo a force-push. Otvorený repo bez force-pushe = secrets stále dostupné.