Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Sigurnosne kopije u webrootu: .zip, .sql i .bak

Zašto dumpovi baza podataka, arhive i sigurnosne kopije u javnom direktoriju spadaju među najčešća curenja podataka, kako ih pronaći, blokirati i razjasniti jesu li dohvaćene.

Stanje 5 min čitanjaSiguran razvoj

Ukratko: Sigurnosne kopije u webrootu, dakle dumpove baza podataka (.sql), arhive (.zip, .tar.gz) i sigurnosne kopije (.bak, .old, ~), može preuzeti svatko tko zna ili pogodi naziv datoteke. Takve datoteke redovito tražite pomoću find, sigurnosne kopije premjestite izvan javnog direktorija, tipične nastavke blokirajte u web-poslužitelju i u pristupnim zapisnicima provjerite jesu li već dohvaćene.

Sigurnosna kopija koja postaje curenje

Neposredno prije updatea netko brzo napravi sigurnosnu kopiju: backup.zip u glavnom direktoriju, pokraj nje datenbank.sql. Update uspije, datoteke ostanu. Mjesecima kasnije još su tu, s cjelokupnim kodom, svim podacima kupaca i pristupnim podacima web-stranice.

Ovaj uzorak spada među najčešće nalaze pri provjerama web-poslužitelja. Ne treba exploit ni ranjivost u PHP-u. Web-poslužitelj iz webroota isporučuje što tamo leži, a arhive ili SQL datoteke ne izvršava, nego ih nudi za preuzimanje.

Arhiva web-stranice pritom ne sadrži samo podatke, nego i kod zajedno s konfiguracijom. Tko je preuzme, može na miru tražiti ranjivosti i zna pristupne podatke za bazu podataka.

Automatizirani skeneri ciljano traže tipične nazive poput backup.zip, site.tar.gz ili dump.sql, često u kombinaciji s nazivom domene ili datumom. Tko vjeruje da ga neobičan naziv datoteke štiti, podcjenjuje koliko je ta potraga sustavna.

Koje se datoteke misle

Sigurnosne kopije u webrootu javljaju se u više oblika:

Vrsta Tipični nastavci Što se u njima krije
Dumpovi baza podataka .sql, .sql.gz, .dump podaci kupaca, narudžbe, hashovi lozinki, postavke
Arhive web-stranice .zip, .tar, .tar.gz, .tgz, .rar, .7z cijeli kod, konfiguracija, uploadi
Kopije pojedinačnih datoteka .bak, .old, .orig, .save, .php~, .copy često konfiguracijske datoteke s pristupnim podacima
Ostaci uređivača .swp, .swo, ~ na kraju dijelovi datoteka koje se upravo uređuju
Sigurnosne kopije dodataka vlastiti poddirektoriji u CMS-u potpune sigurnosne kopije, djelomično s nazivima koji se mogu pogoditi

Osobito su osjetljive kopije konfiguracijskih datoteka. Izvornu datoteku config.php poslužitelj izvršava i njezin sadržaj ostaje skriven. Kopiju config.php.bak isporučuje kao tekst, zajedno s lozinkom baze podataka.

Pronaći backup u webrootu: pretraga na poslužitelju

Sljedeća pretraga navodi sumnjive datoteke ispod webrootova s datumom i veličinom. Putanje prilagodite svojem poslužitelju:

find /var/www /srv/www -type f \( \
  -iname '*.sql' -o -iname '*.sql.gz' -o -iname '*.dump' -o \
  -iname '*.zip' -o -iname '*.tar' -o -iname '*.tar.gz' -o -iname '*.tgz' -o \
  -iname '*.rar' -o -iname '*.7z' -o \
  -iname '*.bak' -o -iname '*.old' -o -iname '*.orig' -o -iname '*.save' -o \
  -iname '*~' -o -iname '*.swp' \) \
  -printf '%TY-%Tm-%Td  %10s  %p\n' 2>/dev/null | sort

Nije svaki pogodak problem. Neke su arhive svjesno stavljene na preuzimanje, primjerice priručnici. Svaka datoteka ipak zaslužuje svjesnu odluku. Obratite osobitu pažnju na velike datoteke i na mape dodataka za sigurnosne kopije. Kod zajedničkog hostinga bez pristupa ljusci pomaže pregled datoteka u hosting panelu ili dohvat putem SFTP-a.

Djelujte odmah

Ako u webrootu nađete dump baze podataka s podacima kupaca, odmah ga premjestite iz javnog direktorija i osigurajte pristupne zapisnike prije nego se rotiraju. Tek zatim razjasnite je li datoteka dohvaćena.

Je li datoteka već preuzeta?

Odgovor stoji u pristupnim zapisnicima web-poslužitelja. Traže se uspješni dohvati, dakle status 200, na pronađene datoteke:

# Uspješni dohvati tipičnih nastavaka sigurnosnih kopija (Combined format zapisnika)
zgrep -hE '\.(sql|sql\.gz|zip|tar|tgz|gz|bak|old|7z|rar)[ ?]' /var/log/nginx/access.log* \
  | awk '$9 == 200 {print $4, $1, $7, $10}'

Ispis pokazuje vrijeme, adresu, putanju i veličinu odgovora. Ako preneseno odgovara veličini datoteke, datoteka je preuzeta u cijelosti. Koliko unatrag zapisnici sežu, ovisi o rotaciji. Ako ne sežu do datuma izrade datoteke, raniji se dohvat ne može isključiti. Opširno to opisuje Analizirati zapisnike web-poslužitelja nakon napada. Bez pristupa sirovim zapisnicima, primjerice kod zajedničkog hostinga, od hostera zatražite zapisnike za dotično razdoblje.

Ako je dohvaćen dump s osobnim podacima ili se to ne može isključiti, počinje provjera obveze prijave. Osnove sažima Obveza prijave prema GDPR-u: 72 sata nakon incidenta; procjena u pojedinačnom slučaju pripada Vašem službeniku za zaštitu podataka. Pristupne podatke iz dohvaćenih datoteka u svakom slučaju zamijenite.

Dodaci za sigurnosne kopije, paneli i selidbe

Mnogi nalazi potječu od dodataka za sigurnosne kopije CMS-ova i shopova. Oni sigurnosne kopije često odlažu u poddirektorij webroota, djelomično s nazivima od datuma i domene koji se mogu pogoditi. U svakom dodatku provjerite tri postavke: kamo se sprema? Brišu li se lokalne kopije nakon učitavanja na vanjsko odredište? Je li lokalna mapa zaštićena od izravnog dohvata?

Sigurnosne kopije iz hosting panela u pravilu leže izvan webroota, primjerice u matičnom direktoriju. Problematično postaje kad netko takvu sigurnosnu kopiju kopira u webroot jer je preuzimanje u pregledniku ugodnije nego putem SFTP-a. Za selidbe stoga vrijedi: prijenos putem SFTP-a ili izravno između poslužitelja, nikad preko javne poveznice.

Ako agencije ili pružatelji usluga održavaju Vaše web-stranice, ovo bi pravilo trebalo stajati i u ugovoru, uz obvezu čišćenja nakon radova održavanja. Napomene daje Ugovori s IT pružateljima usluga: jasno urediti sigurnosne obveze.

Trajno spriječiti: mjesto pohrane i blokade

Da se problem ne ponovi, trebaju dvije razine. Prva je organizacijska: sigurnosne kopije imaju čvrsto mjesto izvan webroota i dodatno izvan poslužitelja. Kako izgleda pouzdana sigurnosna kopija, opisuje vodič Sigurnosne kopije prema pravilu 3-2-1.

Druga razina je tehnička: web-poslužitelj u načelu odbija tipične nastavke sigurnosnih kopija, čak i ako neka datoteka ipak ostane ležati.

location ~* \.(sql|sql\.gz|dump|bak|old|orig|save|swp|swo)$ {
    return 404;
}
location ~ ~$ {
    return 404;
}

Arhive poput .zip blokirajte samo ako Vaša web-stranica ne nudi preuzimanja u tom formatu, ili ciljano u direktorijima u kojima nema preuzimanja. Dodatno pomažu redovita automatska pretraga s obavijesti i kratko pravilo u timu: nikakvih sigurnosnih kopija i kopija u webrootu, ni na pet minuta. Srodne slučajeve poput skrivenih konfiguracijskih datoteka obrađuje Ispravno zaštititi pristupne podatke i .env datoteke.

Kako PHP SOS konkretno pomaže?

  • Pretražujemo Vaše webrootove u potrazi za dumpovima, arhivama, kopijama i sigurnosnim kopijama dodataka te ocjenjujemo svaki nalaz.
  • Na temelju pristupnih zapisnika provjeravamo jesu li datoteke dohvaćene i dokumentiramo rezultat za Vašu procjenu zaštite podataka.
  • Postavljamo blokade u web-poslužitelju i redovitu automatsku pretragu.
  • Sigurnosne kopije premještamo na zaštićeno mjesto izvan webroota.

Ovi radovi dio su našeg ojačavanja poslužitelja za PHP web-poslužitelje.

Česta pitanja

Zašto sigurnosne kopije uopće završavaju u webrootu?

Najčešće iz udobnosti: dump se izrađuje za selidbu, dodatak odlaže sigurnosne kopije u vlastitu mapu ili se prije promjene brzo napravi kopija datoteke s nastavkom .bak. Nakon toga datoteka pada u zaborav.

Koliko je opasna datoteka poput config.php.bak?

Vrlo. Datoteku s nastavkom .php poslužitelj izvršava i njezin sadržaj ostaje skriven. Kopiju s drugim nastavkom poslužitelj pak obično isporučuje kao tekst, zajedno s lozinkom baze podataka i ključevima.

Je li javno dostupan dump baze podataka povreda podataka?

Ako sadrži osobne podatke i dohvaćen je ili se dohvat ne može isključiti, u obzir dolazi obveza prijave prema GDPR-u. Procjenu u pojedinačnom slučaju preuzima Vaš službenik za zaštitu podataka ili Vaš pravni savjetnik.

Gdje bi sigurnosne kopije umjesto toga trebale ležati?

Izvan webroota i dodatno izvan poslužitelja, prema pravilu 3-2-1. Barem jedna kopija trebala bi biti pohranjena tako da je sam web-poslužitelj ne može obrisati ni promijeniti.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć