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:

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 cez git pull priamo do public_html a nikoho nenapadlo, že .env tiež 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é:

  1. Heslo k databáze.
  2. Všetky API kľúče (Stripe, Mailgun, atď. — v ich administráciách ako „rotate“ / „revoke“).
  3. JWT secret (po výmene sa všetci prihlásení používatelia budú musieť znova prihlásiť — je to v poriadku).
  4. 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.php

Krok 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é.

Referencie