رمز لغة بدا وكأنه 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 ثم نقطة» لا يستطيع التمييز بين الحالتين.
بدأت كل معاينات .pl.svg وكذلك .pl.png في المعرض تُجيب بالرمز 403 Forbidden. ولم تتأثر أي لغة أخرى، لأنه لا يوجد رمز لغة آخر يستخدمه هذا الموقع يتعارض مع أحد بنود قائمة الامتدادات. رمز واحد فقط.
ما الذي تغيّر
pl أُزيل من قائمة الامتدادات. ولا تزال القاعدة تحظر كل امتداد برمجي حقيقي لدى هذا المشروع سبب للقلق منه؛ لكنها لم تعد تحظر لغة.
ويستحق هذا التدوين بسبب ما جعله يحدث أصلًا: قائمة امتدادات الملفات وقائمة رموز اللغات تأتيان من معجمين مختلفين، ولا شيء يمنع بندًا من حرفين من أن يعني الأمرين معًا. قبل الإضافة إلى أيٍّ من القائمتين في موقع يضع بادئات اللغة في المسار، راجع البند مقابل القائمة الأخرى. لم تُجرَ هذه المراجعة هنا، وكان قارئ لاحظ الصور المصغرة المعطلة هو من كشف الأمر — ولهذا فإن pl، الغائب الآن عن القائمة، يرافقه تعليق يوضح سبب غيابه، كي يصادف من يُجري التنظيف القادم السببَ قبل أن يصادف القاعدة.