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

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

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

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

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

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

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

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

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

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

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

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

Реклама