Копія у веб-каталозі — це витік вихідного коду
Перед правкою великого файлу природно спершу його скопіювати. 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-19index.php.kopiestyle.css.altindex.php.1
Усі віддані з кодом 200. Взірець імені, про який ви не подумали, — саме той, яким ви й скористаєтеся, бо копії називають за тим, що робили тієї миті.
Перевернути розріз
Правило, яке працює, не питає, які розширення заборонені. Воно ставить питання про будову: чи містить це ім’я файлу вихідне розширення, що стоїть не в кінці?
Якщо так, це копія того, що мало виконуватися, хай би що казав суфікс після. index.php.будь-що підходить. style.css.будь-що підходить. Взірець покриває імена, яких ще ніхто не вигадав, і в цьому весь сенс.
Перевірено сьогодні на працюючому сервері: усі п’ять імен вище тепер дають 403, зокрема й ті, яких не існує — правило відмовляє формі, а не файлу.
Виняток і чого він учить
Одне законне ім’я файлу тут має саме таку форму: попередньо стиснені файли пишуться як style.css.1787777226.gz, розширення посередині за задумом. Тому правило несе один вузький виняток для цифрового відтинку, за яким іде .gz, і цей файл віддається з 200, як і має.
Саме на такому винятку ці правила зазвичай і ламаються, тож варто сказати, що робить цей безпечним: він вузький настільки, що не можна скласти index.php.щось.gz і отримати свій код назад, адже середній відтинок має складатися лише з цифр. Ширший виняток — «усе, що закінчується на .gz» — віддав би правило цілком.
А найпростіша порада лишається тією, яка робить усе це непотрібним: тримайте копії поза опублікованим каталогом. Правило — це сітка на той день, коли ви забудете, а не дозвіл перестати стежити, куди падає копія.