Írjon a támogatásnak

E-mailben válaszolunk, általában két napon belül.

A Google reCAPTCHA visszaélés elleni védelemként ellenőrzi ezt a beküldést; ennek során adatok jutnak el a Google-hoz. A szkript csak az űrlap megnyitásakor töltődik be.

← Összes bejegyzés

A webgyökérben hagyott biztonsági mentés kiszivárogtatja a forráskódot

Egy nagy fájl szerkesztése előtt kézenfekvő először lemásolni. cp index.php index.php.vor-aenderung, és csak utána jöhet a munka. Ha ez a fájl abban a könyvtárban van, amelyet a webszerver közzétesz, a teljes forráskód máris letölthetővé vált egyszerű szövegként — adatbázis-hozzáférési adatok, titkos kulcsok, bármi, ami éppen a fájlban van.

Az Apache az index.php fájlt a PHP-n keresztül futtatja, mert a vége .php. Az index.php.vor-aenderung vége viszont nem .php, hanem .vor-aenderung, amelyről az Apache sosem hallott, így az alapértelmezés szerint jár el: elküldi a bájtokat.

A szabály, amelyet a legtöbben írnak, és miért nem elég

A szokásos védelem a kiterjesztések tiltólistája: .bak, .orig, .save, .sql, .old. Azt a fájlt fogja meg, amelyik éppen eszünkbe jutott. Itt kipróbálva ez a lista a probe.bak esetén helyesen döntött, az alábbiak mindegyikénél viszont rosszul:

  • index.php.vor-xyz — így történt a valóságban
  • index.php.2026-08-19
  • index.php.kopie
  • style.css.alt
  • index.php.1
fájlnévválaszprobe.bak403index.php.vor-xyz200index.php.2026-08-19200index.php.kopie200style.css.alt200a naiv lista ötből egyet fog meg

Mindet 200-as kóddal kiszolgálta. Mindig az az elnevezési minta kerül használatba, amelyre senki sem gondolt, mert a mentéseket arról nevezik el, ami éppen történt.

Fordítsuk meg a szempontot

A működő szabály nem azt kérdezi, mely kiterjesztések tiltottak. Szerkezeti kérdést tesz fel: tartalmaz-e a fájlnév olyan forráskód-kiterjesztést, amely nem a végén áll?

Ha igen, akkor valaminek a másolata, amit futtatásra szántak, bármit mondjon is az utána következő toldalék. index.php.anything illeszkedik. style.css.anything illeszkedik. A minta lefedi azokat a neveket is, amelyeket még senki sem talált ki, és éppen ez a lényeg.

A mai napon az éles szerveren ellenőrizve a fenti öt név mindegyike 403-at ad vissza, azok is, amelyek nem is léteznek — a szabály az alakot tiltja, nem a fájlt.

A kivétel, és amit tanít

Egy jogos fájlnév itt pontosan ilyen alakú: az előre tömörített erőforrások így íródnak ki: style.css.1787777226.gz, vagyis szándékosan kiterjesztéssel a közepén. A szabály ezért egyetlen szűk kivételt tartalmaz: egy csak számjegyekből álló szegmenst, amelyet ez követ: .gz, és ez a fájl a várt módon 200-at ad vissza.

Az ilyen kivételeknél szoktak elcsúszni ezek a szabályok, ezért érdemes kimondani, mi teszi ezt biztonságossá: elég szűk ahhoz, hogy semmilyen index.php.something.gz ne legyen összeállítható, amellyel a forrás visszaszerezhető, mert a középső szegmens csak számjegyekből állhat. Egy tágabb kivétel — „bármi, ami .gz-re végződik” — az egész szabályt hatástalanná tette volna.

A legegyszerűbb tanács pedig továbbra is az, amely mindezt fölöslegessé teszi: a biztonsági mentéseket a közzétett könyvtáron kívül kell tartani. A szabály védőháló arra a napra, amikor ez feledésbe merül, nem pedig felmentés az alól, hogy törődjünk vele, hová kerül a másolat.

Hirdetés