Звернутися до підтримки

Відповідаємо електронною поштою, зазвичай протягом двох днів.

Google reCAPTCHA перевіряє це звернення на зловживання; дані передаються до Google. Скрипт завантажується лише під час відкриття цієї форми.

← Усі записи

Копія у веб-каталозі — це витік вихідного коду

Про матеріали та їх перевірку

У цій статті

Перед правкою великого файлу природно спершу його скопіювати. cp index.php index.php.pered-pravkoju, потім працювати. Якщо цей файл лежить у каталозі, який публікує вебсервер, увесь вихідний код щойно став завантажуваним як простий текст — доступи до бази, таємниці, усе, що у файлі опинилося.

Apache пропускає index.php через PHP, бо він закінчується на .php. index.php.pered-pravkoju не закінчується на .php. Він закінчується на .pered-pravkoju, про що Apache ніколи не чув, тож робить те, що за умовчанням, і віддає байти.

Правило, яке пишуть майже всі, і чому його замало

Звичайний захист — список заборонених розширень: .bak, .orig, .save, .sql, .old. Він ловить той файл, про який подумали заздалегідь. Перевірено тут: цей список дав правильну відповідь для probe.bak і хибну для кожного з цих:

  • index.php.vor-xyz — так це й сталося насправді
  • index.php.2026-08-19
  • index.php.kopie
  • style.css.alt
  • index.php.1
ім'я файлувідповідьprobe.bak403index.php.vor-xyz200index.php.2026-08-19200index.php.kopie200style.css.alt200наївний список ловить одне з п'яти

Усі віддані з кодом 200. Взірець імені, про який ніхто не подумав, — саме той, що й піде в діло, бо копії називають за тим, що робили тієї миті.

Перевернути розріз

Правило, яке працює, не питає, які розширення заборонені. Воно ставить питання про будову: чи містить це ім’я файлу вихідне розширення, що стоїть не в кінці?

Якщо так, це копія того, що мало виконуватися, хай би що казав суфікс після. index.php.будь-що підходить. style.css.будь-що підходить. Взірець покриває імена, яких ще ніхто не вигадав, і в цьому весь сенс.

Перевірено сьогодні на працюючому сервері: усі п’ять імен вище тепер дають 403, зокрема й ті, яких не існує — правило відмовляє формі, а не файлу.

Виняток і чого він учить

Одне законне ім’я файлу тут має саме таку форму: попередньо стиснені файли пишуться як style.css.1787777226.gz, розширення посередині за задумом. Тому правило несе один вузький виняток для цифрового відтинку, за яким іде .gz, і цей файл віддається з 200, як і має.

Саме на такому винятку ці правила зазвичай і ламаються, тож варто сказати, що робить цей безпечним: він вузький настільки, що не можна скласти index.php.щось.gz і отримати свій код назад, адже середній відтинок має складатися лише з цифр. Ширший виняток — «усе, що закінчується на .gz» — віддав би правило цілком.

А найпростіша порада лишається тією, яка робить усе це непотрібним: копії тримають поза опублікованим каталогом. Правило — це сітка на той день, коли про це забудуть, а не дозвіл перестати стежити, куди падає копія.

Реклама