Záloha wp-config.php je verejne dostupná

Čo to je

Vo webroote vášho WordPressu je verejne dostupný súbor ako wp-config.php.bak, wp-config.php.old, wp-config.txt alebo wp-config.php~. Vzniká to najčastejšie takto:

Prečo je to problém

Kľúčový rozdiel oproti bežnému wp-config.php: PHP súbory Apache/nginx vykonáva — vráti HTML output, nie kód. Ale súbor s príponou .bak alebo .txt server pošle ako čistý text. Útočník otvorí https://example.cz/wp-config.php.bak a dostane:

S kľúčmi si útočník podpíše cookies admina. S databázou prepíše obsah a nastaví heslo. Spravidla je hotovo.

Ako to opraviť

Krok 1 — zmazať všetky .bak / .old / .txt zálohy

cd /var/www/example.cz
ls -la wp-config*
# nájsť a zmazať
rm wp-config.php.bak wp-config.php.old wp-config.php~ wp-config.txt

Prejdite aj celý webroot:

find . -type f \( -name "*.bak" -o -name "*.old" -o -name "*~" \) -ls

Krok 2 — rotovať to, čo bolo v .bak súbore

Predpokladajte, že niekto súbor stiahol. Vymeňte:

  1. Heslo k databáze. Po zmene aktualizujte aj wp-config.php: define('DB_PASSWORD', 'noveheslo');.
  2. WordPress security keys (AUTH_KEY atď.). Nové vygenerujte na api.wordpress.org/secret-key/1.1/salt/ a nahraďte. Táto zmena odhlási všetkých aktívnych používateľov — je to v poriadku.

Krok 3 — zablokovať .bak / .old patterns na webserveri

Aby sa ďalšia omylom vytvorená záloha nedostala von:

nginx:

location ~* \.(bak|old|backup|orig|swp|save|~)$ {
    deny all;
    return 404;
}

Apache (.htaccess):

<FilesMatch "\.(bak|old|backup|orig|swp|save|~)$">
    Require all denied
</FilesMatch>

Krok 4 — zálohovať správne

Záloha wp-config.php patrí mimo webroot, do verzovania (privátny git, S3 bucket s SSE, dedikovaný backup hosting). Nikdy nie vedľa aktívnej verzie.

Referencie