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

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

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

← Усі записи

Код мови, схожий на Perl

19 серпня 2026 року ми додали до .htaccess правило, що блокує клас файлів, які браузеру ніколи не можна віддавати напряму: залишкові копії вихідного коду, що лишаються в кореневій веб-директорії після редагування — index.php.bak, випадковий config.py, будь-що зі скриптовим розширенням, де відвідувач міг би отримати вихідний код як звичайний текст замість того, щоб його виконати.

Правило спрацьовувало за розширенням файлу: .php, .py, .rb, .pl та ще з десяток інших. .pl — це Perl. У цьому проєкті немає жодного рядка на Perl — правило було профілактичним, а не виправленням для файлу, що справді існував.

Приблизно через день відвідувач повідомив, що прев'ю лічильників зламані. Усі до одного, але лише однією мовою.

Інший «pl»

stats4u.net обирає мову для кожного відвідувача через узгодження Accept-Language, а не через фіксоване значення за замовчуванням — браузеру, налаштованому на польську, напряму віддається /pl/, без жодного перенаправлення, а англійська — це те, до чого сайт повертається, коли нічого не збігається. Польська — поширений збіг: на неї потрапляє достатньо відвідувачів, щоб день зламаних мініатюр не міг довго лишатися непоміченим.

Кожне прев'ю дизайну — це один невеликий файл на стиль і мову: cache/preview/2900.pl.svg. Шаблон, покликаний упіймати something.pl — Perl-скрипт —, також збігся з 2900.pl, за яким іде .svg: номер стилю, код мови, що випадково пишеться так само, як скриптове розширення, а тоді вже справжній тип файлу. Шаблон «крапка-pl-крапка» не може відрізнити одне від іншого.

2900.pl.svg403номер оформленнякод мовитип файлу2900.en.svg200відрізняється лише код мови

Кожне прев'ю .pl.svg і .pl.png у галереї почало відповідати 403 Forbidden. Жодна інша мова не постраждала, бо жоден інший мовний код, який використовує цей сайт, не збігається з жодним пунктом у списку розширень. Лише цей один.

Що змінилося

pl прибрали зі списку розширень. Він і далі блокує кожне справжнє скриптове розширення, через яке цей проєкт має підстави хвилюватися; він більше не блокує мову.

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

Реклама