Kontakt z pomocą

Odpowiadamy e-mailem, zwykle w ciągu dwóch dni.

Google reCAPTCHA sprawdza to zgłoszenie pod kątem nadużyć; dane trafiają do Google. Skrypt ładuje się dopiero po otwarciu formularza.

← Wszystkie wpisy

Kiedy „pl” oznaczało dwie różne rzeczy

19 sierpnia 2026 r. dodaliśmy do .htaccess regułę blokującą klasę plików, które nigdy nie powinny być serwowane bezpośrednio do przeglądarki: pozostałości kopii kodu źródłowego leżące w katalogu głównym strony po edycji — index.php.bak, zabłąkany config.py, cokolwiek z rozszerzeniem skryptowym, gdzie odwiedzający mógłby pobrać kod źródłowy jako zwykły tekst zamiast go uruchomić.

Reguła dopasowywała się według rozszerzenia pliku: .php, .py, .rb, .pl i tuzin innych. .pl to Perl. Ten projekt nie ma w sobie ani jednej linii Perla — reguła miała charakter zapobiegawczy, a nie naprawiała plik, który istniał.

Mniej więcej dzień później pewien odwiedzający zgłosił, że podglądy liczników są zepsute. Wszystkie, ale tylko w jednym języku.

Drugie „pl”

stats4u.net wybiera język dla każdego odwiedzającego przez negocjację Accept-Language, a nie przez stały język domyślny — przeglądarka ustawiona na polski trafia bezpośrednio na /pl/, bez przekierowania, a angielski jest tym, na co strona spada, gdy nic nie pasuje. Polski trafia się często: wystarczająco wielu odwiedzających tam trafia, że dzień z zepsutymi miniaturami nie mógł długo pozostać niezauważony.

Każdy podgląd wzoru to jeden mały plik na styl i język: cache/preview/2900.pl.svg. Wzorzec mający wyłapywać something.pl — skrypt Perla — dopasował się też do 2900.pl zakończonego na .svg: numeru stylu, kodu języka, który akurat pisze się tak samo jak rozszerzenie skryptowe, a potem właściwego typu pliku. Wzorzec kropka-pl-kropka nie potrafi odróżnić tych dwóch przypadków.

Każdy podgląd .pl.svg i .pl.png w galerii zaczął odpowiadać 403 Forbidden. Każdy inny język pozostał nietknięty, ponieważ żaden inny kod języka używany przez tę stronę nie koliduje z żadną pozycją na liście rozszerzeń. Tylko ten jeden.

Co się zmieniło

pl zniknęło z listy rozszerzeń. Nadal blokuje każde rzeczywiste rozszerzenie skryptowe, którym ten projekt ma powód się przejmować; nie blokuje już języka.

Warto to spisać ze względu na to, dlaczego w ogóle do tego doszło: lista rozszerzeń plików i lista kodów językowych pochodzą z dwóch różnych słowników, i nic nie stoi na przeszkodzie, by dwuliterowy wpis oznaczał obie te rzeczy naraz. Zanim doda się coś do którejkolwiek z tych list na stronie z prefiksami językowymi w ścieżce, trzeba to sprawdzić względem drugiej listy. My tego nie zrobiliśmy, i dopiero czytelnik, który zauważył zepsute miniatury — nie nasz własny monitoring — pozwolił to wyłapać.