Rezervna kopija u korenu veba je curenje izvornog koda
U ovom članku
Pre izmene velike datoteke prirodan potez je da se prvo kopira. cp index.php index.php.vor-aenderung, pa rad. Ako ta datoteka stoji u direktorijumu koji veb server objavljuje, ceo izvorni kod je upravo postao dostupan za preuzimanje kao običan tekst — pristupni podaci za bazu, tajne, sve što datoteka slučajno sadrži.
Apache izvršava index.php kroz PHP jer se završava na .php. index.php.vor-aenderung se ne završava na .php. Završava se na .vor-aenderung, za šta Apache nikada nije čuo, pa radi podrazumevano i šalje bajtove.
Pravilo koje većina ljudi piše i zašto nije dovoljno
Uobičajena zaštita je lista zabranjenih ekstenzija: .bak, .orig, .save, .sql, .old. Hvata datoteku koja nam je pala na pamet. Testirana ovde, ta lista je dala tačan odgovor za probe.bak i pogrešan za svaku od ovih:
index.php.vor-xyz— tako se zaista desiloindex.php.2026-08-19index.php.kopiestyle.css.altindex.php.1
Sve su služene sa 200. Obrazac imenovanja na koji niko nije pomislio je onaj koji se koristi, jer se rezervne kopije imenuju prema onome što se u tom trenutku dešavalo.
Okrenite presek
Pravilo koje radi ne pita koje su ekstenzije zabranjene. Postavlja strukturalno pitanje: da li ovo ime datoteke sadrži ekstenziju izvornog koda koja nije na kraju?
Ako sadrži, to je kopija nečega što je bilo namenjeno izvršavanju, bez obzira na to šta kaže sufiks iza nje. index.php.anything se poklapa. style.css.anything se poklapa. Obrazac pokriva imena koja niko još nije smislio, a u tome je cela poenta.
Proverom na živom serveru danas, svih pet gornjih imena sada vraća 403, uključujući ona koja ne postoje — pravilo zabranjuje oblik, a ne datoteku.
Izuzetak i šta uči
Jedno legitimno ime datoteke ovde ima baš taj oblik: unapred komprimovani resursi zapisuju se kao style.css.1787777226.gz, sa ekstenzijom u sredini po dizajnu. Zato pravilo ima jedan uzak izuzetak za numerički segment iza kojeg sledi .gz, i ta datoteka vraća 200 kako treba.
Izuzetak kao ovaj je mesto gde ova pravila obično pogreše, pa vredi reći šta ovaj čini bezbednim: dovoljno je uzak da se nijedan index.php.something.gz ne može sastaviti tako da vrati izvorni kod, jer srednji segment mora biti samo cifre. Širi izuzetak — „sve što se završava na .gz“ — vratio bi celo pravilo.
A najjednostavniji savet i dalje je onaj zbog kog je sve ovo nepotrebno: držite rezervne kopije van objavljenog direktorijuma. Pravilo je mreža za dan kada se to zaboravi, a ne dozvola da se prestane brinuti gde kopija završava.