# Varmuuskopiotiedostot verkkojuuressa: .zip, .sql ja .bak

> Verkkojuuren varmuuskopiot voi ladata kuka tahansa. Näin löydätte .zip-, .sql- ja .bak-tiedostot, estätte ne ja tarkistatte, onko niitä haettu.

Lähde: https://phpsos.de/fi/blog/backup-dateien-im-webroot/  
Tilanne: 25.10.2026  
Palveluntarjoaja: PHP SOS, PHP-hätäapu ja palvelimen tietoturva. Pikaapu WhatsAppilla: https://wa.me/491736494914?text=Hei%20PHP%20SOS%2C%20tarvitsemme%20apua%20PHP-palvelimemme%20kanssa.%20Yritys%3A%20%E2%80%A6%20Verkkosivusto%3A%20%E2%80%A6

**Lyhyesti:** Varmuuskopiotiedostot verkkojuuressa eli tietokantavedokset (`.sql`), arkistot (`.zip`, `.tar.gz`) ja varmuuskopiot (`.bak`, `.old`, `~`) voi ladata kuka tahansa, joka tietää tiedostonimen tai arvaa sen. Etsikää tällaisia tiedostoja säännöllisesti komennolla `find`, siirtäkää varmuuskopiot julkisen hakemiston ulkopuolelle, estäkää tyypilliset päätteet verkkopalvelimessa ja tarkistakaa käyttölokeista, onko niitä jo haettu.

## Varmuuskopio, josta tulee vuoto

Juuri ennen päivitystä joku luo vielä nopeasti varmuuskopion: `backup.zip` pääkansioon, sen viereen `datenbank.sql`. Päivitys onnistuu, tiedostot jäävät paikalleen. Kuukausia myöhemmin ne ovat yhä siellä, koko koodin, kaikkien asiakastietojen ja verkkosivuston tunnusten kanssa.

Tämä malli kuuluu verkkopalvelinten tarkistusten yleisimpiin havaintoihin. Se ei tarvitse hyökkäystä eikä aukkoa PHP:ssä. Verkkopalvelin tarjoilee verkkojuuresta sen, mitä siellä on, eikä se suorita arkistoja tai SQL-tiedostoja vaan tarjoaa ne ladattavaksi.

Verkkosivuston arkisto sisältää paitsi tietoja myös koodin konfiguraatioineen. Joka lataa sen, voi rauhassa etsiä heikkouksia ja tuntee tietokannan tunnukset.

Automaattiset skannerit etsivät kohdennetusti tyypillisiä nimiä kuten `backup.zip`, `site.tar.gz` tai `dump.sql`, usein yhdistettynä verkkotunnukseen tai päivämäärään. Joka luulee epätavallisen tiedostonimen suojaavan, aliarvioi, kuinka järjestelmällisesti tätä etsintää tehdään.

## Mitä tiedostoja tarkoitetaan

Varmuuskopiotiedostoja verkkojuuressa esiintyy useassa muodossa:

| Laji | Tyypilliset päätteet | Mitä sisällä on |
|---|---|---|
| Tietokantavedokset | `.sql`, `.sql.gz`, `.dump` | asiakastiedot, tilaukset, salasanatiivisteet, asetukset |
| Verkkosivuston arkistot | `.zip`, `.tar`, `.tar.gz`, `.tgz`, `.rar`, `.7z` | koko koodi, konfiguraatio, uploadit |
| Yksittäisten tiedostojen kopiot | `.bak`, `.old`, `.orig`, `.save`, `.php~`, `.copy` | usein asetustiedostoja tunnuksineen |
| Editorin jäänteet | `.swp`, `.swo`, `~` lopussa | parhaillaan muokattujen tiedostojen osia |
| Laajennusten varmuuskopiot | CMS:n omat alikansiot | täydelliset varmuuskopiot, osin arvattavilla nimillä |

Erityisen arkaluonteisia ovat asetustiedostojen kopiot. Alkuperäisen tiedoston `config.php` palvelin suorittaa, ja sen sisältö pysyy piilossa. Kopion `config.php.bak` se tarjoilee tekstinä tietokannan salasanoineen.

## Varmuuskopioiden löytäminen verkkojuuresta: haku palvelimella

Seuraava haku luettelee epäilyttävät tiedostot verkkojuurten alla päivämäärineen ja kokoineen. Mukauttakaa polut palvelimeenne:

```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
```

Kaikki osumat eivät ole ongelma. Jotkin arkistot on tarkoituksella tarjottu ladattaviksi, esimerkiksi käsikirjat. Jokainen tiedosto ansaitsee kuitenkin tietoisen päätöksen. Kiinnittäkää erityistä huomiota suuriin tiedostoihin ja varmuuskopiolaajennusten kansioihin. Jaetussa hostingissa ilman shell-pääsyä auttaa hosting-paneelin tiedostoyleiskatsaus tai haku SFTP:llä.

> **Toimi heti:**
> Jos löydätte verkkojuuresta tietokantavedoksen, jossa on asiakastietoja, siirtäkää se heti pois julkisesta hakemistosta ja varmistakaa käyttölokit, ennen kuin ne kierrätetään. Vasta sen jälkeen selvitätte, onko tiedostoa haettu.

## Onko tiedosto jo ladattu?

Vastaus on verkkopalvelimen käyttölokeissa. Etsittäviä ovat onnistuneet haut eli tila 200 löydetyistä tiedostoista:

```bash
# Tyypillisten varmuuskopiopäätteiden onnistuneet haut (Combined-lokimuoto)
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}'
```

Tuloste näyttää ajankohdan, osoitteen, polun ja vastauksen koon. Jos siirretty koko vastaa tiedoston kokoa, tiedosto on ladattu kokonaan. Kuinka kauas lokit ulottuvat, riippuu kierrätyksestä. Jos ne eivät ulotu tiedoston luontipäivään asti, aiempaa hakua ei voida sulkea pois. Tarkemmin sen kuvaa [Verkkopalvelimen lokien analysointi hyökkäyksen jälkeen](https://phpsos.de/fi/ratgeber/logfiles-auswerten/). Jos teillä ei ole pääsyä raakalokeihin, esimerkiksi jaetussa hostingissa, kysykää hosting-palveluntarjoajalta kyseisen ajanjakson lokeja.

Jos henkilötietoja sisältävä vedos on haettu tai sitä ei voida sulkea pois, ilmoitusvelvollisuuden arviointi alkaa. Perusteet kokoaa [GDPR-ilmoitusvelvollisuus: 72 tuntia tapahtuman jälkeen](https://phpsos.de/fi/compliance/dsgvo-meldepflicht-72-stunden/); yksittäistapauksen arviointi kuuluu tietosuojavastaavallenne. Haettujen tiedostojen tunnukset vaihdatte joka tapauksessa.

## Varmuuskopiolaajennukset, paneelit ja muutot

Monet löydöt johtuvat CMS-järjestelmien ja verkkokauppojen varmuuskopiolaajennuksista. Ne tallentavat varmuuskopiot usein verkkojuuren alikansioon, osin päivämäärästä ja verkkotunnuksesta muodostetuilla nimillä, jotka voi arvata. Tarkistakaa jokaisesta laajennuksesta kolme asetusta: Minne varmuuskopioidaan? Poistetaanko paikalliset kopiot, kun ne on ladattu ulkoiseen kohteeseen? Onko paikallinen kansio suojattu suoralta haulta?

Hosting-paneelien varmuuskopiot sijaitsevat yleensä verkkojuuren ulkopuolella, esimerkiksi kotihakemistossa. Ongelmalliseksi tilanne muuttuu, jos joku kopioi tällaisen varmuuskopion verkkojuureen, koska lataus selaimella on kätevämpi kuin SFTP:llä. Muutoissa pätee siksi: siirto SFTP:llä tai suoraan palvelinten välillä, ei koskaan julkisen linkin kautta.

Jos virastot tai palveluntarjoajat huoltavat verkkosivustojanne, tämän säännön pitäisi olla myös sopimuksessa, samoin velvollisuus siivota huoltotöiden jälkeen. Vihjeitä antaa [IT-palveluntarjoajasopimukset: tietoturvavelvoitteet selkeiksi](https://phpsos.de/fi/blog/dienstleistervertrag-sicherheit/).

## Pysyvä ennaltaehkäisy: säilytyspaikka ja estot

Jotta ongelma ei toistu, tarvitaan kaksi tasoa. Ensimmäinen on organisatorinen: varmuuskopioilla on kiinteä paikka verkkojuuren ulkopuolella ja lisäksi palvelimen ulkopuolella. Millainen kestävä varmuuskopio on, kuvaa opas [Varmuuskopiot 3-2-1-säännön mukaan](https://phpsos.de/fi/ratgeber/backups-3-2-1/).

Toinen taso on tekninen: verkkopalvelin kieltäytyy periaatteessa tyypillisistä varmuuskopiopäätteistä, vaikka tiedosto joskus jäisikin paikalleen.

```nginx
location ~* \.(sql|sql\.gz|dump|bak|old|orig|save|swp|swo)$ {
    return 404;
}
location ~ ~$ {
    return 404;
}
```

Arkistot kuten `.zip` estätte vain, jos verkkosivustonne ei tarjoa lataamista tässä muodossa, tai kohdennetusti hakemistoissa, joissa ei ole latauksia. Lisäksi auttavat säännöllinen automaattinen haku ilmoituksineen ja lyhyt sääntö tiimissä: ei varmuuskopioita eikä kopioita verkkojuuressa, ei edes viideksi minuutiksi. Vastaavia tapauksia kuten piilotetut asetustiedostot käsittelee [Tunnusten ja .env-tiedostojen oikea suojaus](https://phpsos.de/fi/blog/env-dateien-schuetzen/).

## Miten PHP SOS auttaa konkreettisesti?

- Käymme verkkojuurenne läpi vedosten, arkistojen, kopioiden ja laajennusten varmuuskopioiden varalta ja arvioimme jokaisen löydön.
- Tarkistamme käyttölokien perusteella, onko tiedostoja haettu, ja dokumentoimme tuloksen tietosuoja-arviointianne varten.
- Otamme käyttöön verkkopalvelimen estot ja säännöllisen automaattisen haun.
- Siirrämme varmuuskopiot suojattuun paikkaan verkkojuuren ulkopuolelle.

Nämä työt kuuluvat [PHP-verkkopalvelinten koventamiseemme](https://phpsos.de/fi/leistungen/server-haertung/).


## Usein kysytyt kysymykset

**Miksi varmuuskopiot päätyvät ylipäätään verkkojuureen?**  
Yleensä mukavuudenhalusta: vedos luodaan muuttoa varten, laajennus tallentaa varmuuskopiot omaan kansioonsa tai ennen muutosta luodaan nopeasti tiedoston kopio päätteellä .bak. Sen jälkeen tiedosto unohtuu.

**Kuinka vaarallinen on tiedosto kuten config.php.bak?**  
Erittäin. Päätteellä .php oleva tiedosto suoritetaan palvelimella, ja sen sisältö pysyy piilossa. Kopion, jolla on toinen pääte, palvelin sen sijaan tarjoilee yleensä tekstinä tietokannan salasanoineen ja avaimineen.

**Onko julkisesti haettavissa oleva tietokantavedos tietosuojaloukkaus?**  
Jos se sisältää henkilötietoja ja sitä on haettu tai hakua ei voida sulkea pois, GDPR:n mukainen ilmoitusvelvollisuus tulee kyseeseen. Yksittäistapauksen arvioinnin hoitaa tietosuojavastaavanne tai oikeudellinen neuvonantajanne.

**Missä varmuuskopioiden pitäisi sen sijaan olla?**  
Verkkojuuren ulkopuolella ja lisäksi palvelimen ulkopuolella, 3-2-1-säännön mukaan. Vähintään yksi kopio tulisi tallentaa niin, ettei verkkopalvelin itse voi poistaa tai muuttaa sitä.

## Lähteet

- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [GDPR 33 artikla: ilmoitus valvontaviranomaiselle](https://dsgvo-gesetz.de/art-33-dsgvo/)
- [Nginx-dokumentaatio](https://nginx.org/en/docs/)
