Sigurnosna kopija u korijenskom web-direktoriju otkriva izvorni kod
O sadržaju i njegovoj provjeri
U ovom članku
Prije uređivanja velike datoteke prirodno je najprije je kopirati. cp index.php index.php.vor-aenderung, a zatim raditi. Ako je ta datoteka u direktoriju koji web-poslužitelj objavljuje, cijeli je izvorni kod upravo postao dostupan za preuzimanje kao običan tekst — pristupni podaci baze, tajne vrijednosti, sve što datoteka sadržava.
Apache izvršava index.php putem PHP-a jer završava nastavkom .php. index.php.vor-aenderung ne završava nastavkom .php. Završava nastavkom .vor-aenderung, za koji Apache nikad nije čuo, pa čini ono zadano i šalje bajtove.
Pravilo koje većina napiše i zašto nije dovoljno
Uobičajena zaštita popis je zabranjenih nastavaka: .bak, .orig, .save, .sql, .old. Prepoznaje datoteku koja je pala na pamet. U ovdašnjem testu taj je popis dao točan odgovor za probe.bak i pogrešan odgovor za svaki od sljedećih primjera:
index.php.vor-xyz— kako se zapravo dogodiloindex.php.2026-08-19index.php.kopiestyle.css.altindex.php.1
Sve su isporučene odgovorom 200. Koristi se upravo onaj obrazac imenovanja kojeg se nitko nije sjetio jer se sigurnosne kopije nazivaju prema onome što se u tom trenutku događalo.
Obrnite pristup
Pravilo koje radi ne pita koji su nastavci zabranjeni. Postavlja strukturno pitanje: sadržava li ovaj naziv datoteke nastavak izvornog koda koji nije na kraju?
Ako sadržava, to je kopija nečega što je trebalo biti izvršeno, bez obzira na to što kaže nastavak iza njega. index.php.anything odgovara. style.css.anything odgovara. Uzorak pokriva nazive koje još nitko nije izmislio, što i jest cijeli smisao.
Provjereno danas na aktivnom poslužitelju: svih pet gornjih naziva sada vraća 403, uključujući one koji ne postoje — pravilo odbija oblik, a ne datoteku.
Iznimka i njezina pouka
Jedan valjani naziv datoteke ovdje ima upravo taj oblik: unaprijed komprimirani resursi zapisuju se kao style.css.1787777226.gz, s nastavkom u sredini po samoj zamisli. Zato pravilo ima jednu usku iznimku za brojčani dio nakon kojeg slijedi .gz, a ta datoteka vraća 200 kako i treba.
Kod takvih iznimaka ta pravila obično pođu po zlu, pa vrijedi navesti što ovu čini sigurnom: dovoljno je uska da se ne može sastaviti nikakav index.php.something.gz za dohvat izvornog koda jer srednji dio mora sadržavati samo znamenke. Šira iznimka — „sve što završava na .gz“ — poništila bi cijelo pravilo.
A najjednostavniji savjet ostaje onaj zbog kojeg sve ovo postaje nepotrebno: čuvajte sigurnosne kopije izvan objavljenog direktorija. Pravilo je zaštitna mreža za dan kada se to zaboravi, a ne dopuštenje da se prestane mariti gdje kopija završava.