Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Когда «pl» означало две разные вещи

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-точка» не способен отличить одно от другого.

Каждое превью .pl.svg и .pl.png в галерее начало отвечать 403 Forbidden. Все остальные языки не пострадали, потому что ни один другой языковой код, используемый на этом сайте, не совпадает ни с одной записью в списке расширений. Только этот один.

Что изменилось

pl убрали из списка расширений. Правило по-прежнему блокирует все реальные скриптовые расширения, о которых этому проекту стоит беспокоиться; язык оно больше не блокирует.

Стоит записать это ради причины, по которой это вообще произошло: список расширений файлов и список языковых кодов происходят из двух разных словарей, и ничто не мешает двухбуквенной записи означать сразу оба. Прежде чем добавлять что-то в любой из этих списков на сайте с языковыми префиксами в пути, сверяйте это со вторым списком. Мы этого не сделали, и понадобился читатель, заметивший сломанные миниатюры — а не наш собственный мониторинг — чтобы это обнаружить.