Contactați asistența

Răspundem prin e-mail, de obicei în două zile.

Google reCAPTCHA verifică această trimitere împotriva abuzurilor; date sunt trimise către Google. Scriptul se încarcă doar când acest formular este deschis.

← Toate articolele

O copie de rezervă în rădăcina web scurge codul sursă

Înainte de a edita un fișier mare, reflexul firesc este să îl copiați mai întâi. cp index.php index.php.vor-aenderung, apoi lucrați. Dacă acel fișier se află în directorul pe care îl publică serverul web, întregul cod sursă tocmai a devenit descărcabil ca text simplu — datele de acces la baza de date, secretele, tot ce se întâmplă să conțină fișierul.

Apache rulează index.php prin PHP pentru că se termină în .php. index.php.vor-aenderung nu se termină în .php. Se termină în .vor-aenderung, de care Apache nu a auzit niciodată, așa că face ce face implicit și trimite octeții.

Regula pe care o scriu cei mai mulți și de ce nu este suficientă

Protecția obișnuită este o listă de extensii interzise: .bak, .orig, .save, .sql, .old. Prinde fișierul la care s-a gândit cineva. Testată aici, lista a dat răspunsul corect pentru probe.bak și răspunsul greșit pentru fiecare dintre acestea:

  • index.php.vor-xyz — așa s-a întâmplat de fapt
  • index.php.2026-08-19
  • index.php.kopie
  • style.css.alt
  • index.php.1
nume de fișierrăspunsprobe.bak403index.php.vor-xyz200index.php.2026-08-19200index.php.kopie200style.css.alt200lista naivă prinde unul din cinci

Toate servite cu 200. Tiparul de denumire la care nu s-a gândit nimeni este cel care ajunge folosit, pentru că copiile de rezervă primesc nume după ce se întâmpla în acel moment.

Inversarea criteriului

Regula care funcționează nu întreabă ce extensii sunt interzise. Pune o întrebare structurală: conține acest nume de fișier o extensie de cod sursă care nu se află la final?

Dacă da, este o copie a ceva menit să fie executat, orice ar spune sufixul de după. index.php.anything se potrivește. style.css.anything se potrivește. Tiparul acoperă și numele pe care nu le-a inventat încă nimeni, și tocmai acesta este scopul.

Verificate azi pe serverul în funcțiune, toate cele cinci nume de mai sus returnează acum 403, inclusiv cele care nu există — regula refuză forma, nu fișierul.

Excepția și ce ne învață

Un nume de fișier legitim de aici are exact această formă: resursele precomprimate sunt scrise ca style.css.1787777226.gz, cu o extensie la mijloc, intenționat. Așa că regula are o singură excepție îngustă, pentru un segment numeric urmat de .gz, iar acel fișier returnează 200, așa cum trebuie.

O astfel de excepție este locul unde aceste reguli de obicei greșesc, așa că merită spus ce o face sigură pe aceasta: este suficient de îngustă încât niciun index.php.something.gz să nu poată fi construit pentru a obține înapoi codul sursă, pentru că segmentul din mijloc trebuie să conțină doar cifre. O excepție mai largă — „orice se termină în .gz” — ar fi anulat întreaga regulă.

Iar cel mai simplu sfat rămâne cel care face toate acestea inutile: păstrați copiile de rezervă în afara directorului publicat. Regula este o plasă de siguranță pentru ziua în care acest lucru este uitat, nu o permisiune de a nu vă mai păsa unde ajunge copia.

Publicitate