Võtke ühendust toega

Vastame e-postiga, tavaliselt kahe päeva jooksul.

Väärkasutuse vältimiseks kontrollib seda saadetist Google reCAPTCHA. Seejuures edastatakse andmeid Googlele. Skript laaditakse alles selle vormi avamisel.

← Kõik postitused

Varukoopia veebijuurikas on lähtekoodi leke

Sisust ja selle ülevaatamisest

Selles artiklis

Enne suure faili muutmist on loomulik see kõigepealt kopeerida. cp index.php index.php.vor-aenderung, seejärel töö. Kui see fail asub kataloogis, mida veebiserver avaldab, on kogu lähtekood just muutunud lihttekstina allalaetavaks — andmebaasi volitused, saladused, kõik, mida fail juhtub sisaldama.

Apache käivitab faili index.php PHP kaudu, sest see lõpeb laiendiga .php. Fail index.php.vor-aenderung ei lõpe laiendiga .php. See lõpeb laiendiga .vor-aenderung, millest Apache pole kunagi kuulnud, nii et ta teeb vaikimisi seda, mida teeb, ja saadab baidid.

Reegel, mille enamik inimesi kirjutab, ja miks see ei piisa

Tavaline kaitse on laiendite keelunimekiri: .bak, .orig, .save, .sql, .old. See püüab kinni faili, mis meelde tuli. Siin testituna andis see loend õige vastuse faili probe.bak puhul ja vale vastuse kõigi nende puhul:

  • index.php.vor-xyz — nii see tegelikult juhtus
  • index.php.2026-08-19
  • index.php.kopie
  • style.css.alt
  • index.php.1
failinimivastusprobe.bak403index.php.vor-xyz200index.php.2026-08-19200index.php.kopie200style.css.alt200naiivne loend püüab kinni ühe viiest

Kõik serveeriti 200-ga. Nimemuster, mida keegi ei mõelnud, ongi see, mida kasutatakse, sest varukoopiaid nimetatakse selle järgi, mis parajasti toimus.

Pöörake lõige ümber

Reegel, mis töötab, ei küsi, millised laiendid on keelatud. See küsib struktuurset küsimust: kas see failinimi sisaldab lähtekoodi laiendit, mis ei ole lõpus?

Kui sisaldab, on see koopia millestki, mis oli mõeldud täitmiseks, olenemata sellest, mida selle järel olev järelliide ütleb. index.php.anything sobib. style.css.anything sobib. Muster katab nimed, mida keegi pole veel välja mõelnud, ja see ongi kogu mõte.

Täna live-serveri vastu kontrollituna tagastavad kõik viis ülaltoodud nime nüüd 403, sealhulgas need, mida ei ole olemas — reegel keelab kuju, mitte faili.

Erand ja mida see õpetab

Ühel legitiimsel failinimel siin on täpselt see kuju: eelpakitud varad kirjutatakse kujul style.css.1787777226.gz, laiend keskel tahtlikult. Seega kannab reegel ühte kitsast erandit numbrilise segmendi jaoks, millele järgneb .gz, ja see fail tagastab 200, nagu peab.

Selline erand on koht, kus need reeglid tavaliselt valesti lähevad, seega tasub öelda, mis selle turvaliseks teeb: see on piisavalt kitsas, et ükski index.php.something.gz ei saa olla konstrueeritud lähtekoodi tagasi toomiseks, sest keskmine segment peab olema ainult numbrid. Laiem erand — „kõik, mis lõpeb .gz-iga“ — oleks kogu reegli tagasi andnud.

Ja kõige lihtsam nõuanne on endiselt see, mis teeb kõik selle tarbetuks: hoidke varukoopiad avaldatud kataloogist väljaspool. Reegel on võrk päevaks, mil see unustatakse, mitte luba lõpetada hoolimine sellest, kuhu koopia maandub.

Reklaam