# Sigurnosne kopije u webrootu: .zip, .sql i .bak

> Sigurnosne kopije u webrootu može preuzeti svatko. Kako pronaći .zip, .sql i .bak datoteke, blokirati ih i provjeriti jesu li dohvaćene.

Izvor: https://phpsos.de/hr/blog/backup-dateien-im-webroot/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**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:

```bash
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:

```bash
# 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](https://phpsos.de/hr/ratgeber/logfiles-auswerten/). 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](https://phpsos.de/hr/compliance/dsgvo-meldepflicht-72-stunden/); 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](https://phpsos.de/hr/blog/dienstleistervertrag-sicherheit/).

## 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](https://phpsos.de/hr/ratgeber/backups-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.

```nginx
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](https://phpsos.de/hr/blog/env-dateien-schuetzen/).

## 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](https://phpsos.de/hr/leistungen/server-haertung/).


## Č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

- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [GDPR čl. 33: prijava nadzornom tijelu](https://dsgvo-gesetz.de/art-33-dsgvo/)
- [Nginx dokumentacija](https://nginx.org/en/docs/)
