Ένας κωδικός γλώσσας που έμοιαζε με 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 — ένα script Perl — ταίριαζε επίσης με το 2900.pl ακολουθούμενο από .svg: έναν αριθμό στυλ, έναν κωδικό γλώσσας που τυχαίνει να γράφεται όπως μια επέκταση γλώσσας σεναρίων, και μετά τον πραγματικό τύπο αρχείου. Ένα μοτίβο τελεία-pl-τελεία δεν μπορεί να ξεχωρίσει αυτά τα δύο.
Κάθε προεπισκόπηση .pl.svg και .pl.png στη συλλογή άρχισε να απαντά 403 Forbidden. Όλες οι άλλες γλώσσες έμειναν ανέγγιχτες, επειδή κανένας άλλος κωδικός γλώσσας που χρησιμοποιεί ο ιστότοπος δεν συμπίπτει με κάποια καταχώριση της λίστας επεκτάσεων. Μόνο αυτός ο ένας.
Τι άλλαξε
pl αφαιρέθηκε από τη λίστα επεκτάσεων. Ο κανόνας εξακολουθεί να μπλοκάρει κάθε πραγματική επέκταση script για την οποία αυτό το έργο έχει λόγο να ανησυχεί· απλώς δεν μπλοκάρει πια μια γλώσσα.
Αξίζει να καταγραφεί ο λόγος για τον οποίο συνέβη καν: μια λίστα επεκτάσεων αρχείων και μια λίστα κωδικών γλώσσας προέρχονται από δύο διαφορετικά λεξιλόγια, και τίποτα δεν εμποδίζει μια καταχώριση δύο γραμμάτων να σημαίνει και τα δύο ταυτόχρονα. Πριν προσθέσετε κάτι σε οποιαδήποτε από τις δύο λίστες, σε έναν ιστότοπο με προθέματα γλώσσας στη διαδρομή, ελέγξτε το απέναντι στην άλλη. Αυτός ο έλεγχος δεν είχε γίνει εδώ, και το πρόβλημα ήρθε στο φως επειδή ένας αναγνώστης πρόσεξε τις χαλασμένες μικρογραφίες — γι’ αυτό το pl, που λείπει πλέον από τη λίστα, συνοδεύεται από ένα σχόλιο που εξηγεί γιατί, ώστε το επόμενο συμμάζεμα να συναντήσει τον λόγο πριν από τον κανόνα.