Destekle iletişim

E-postayla, genellikle iki gün içinde yanıt veririz.

Google reCAPTCHA, kötüye kullanıma karşı bu gönderimi denetler; bu sırada veriler Google'a aktarılır. Komut dosyası yalnızca bu form açıldığında yüklenir.

← Tüm yazılar

Perl gibi görünen bir dil kodu

19 Ağustos 2026'da .htaccess dosyasına, bir tarayıcıya asla doğrudan sunulmaması gereken bir dosya türünü engelleyen bir kural ekledik: bir düzenlemeden sonra web kök dizininde kalan kaynak kodu kopyaları — index.php.bak, ortada kalmış bir config.py, bir ziyaretçinin çalıştırmak yerine kaynağını düz metin olarak indirebileceği, betik uzantılı her şey.

Kural dosya uzantısına göre eşleşiyordu: .php, .py, .rb, .pl, bunların yanında bir düzine uzantı daha. .pl Perl uzantısıdır. Bu projede tek bir satır Perl yok — kural önlem amaçlıydı, var olan bir dosya için yapılmış bir düzeltme değildi.

Yaklaşık bir gün sonra bir ziyaretçi, sayaç önizlemelerinin bozuk olduğunu bildirdi. Hepsi bozuktu, ama yalnızca tek bir dilde.

Öteki “pl”

stats4u.net, dili sabit bir varsayılana göre değil, her ziyaretçi için Accept-Language anlaşmasıyla seçer — Lehçeye ayarlı bir tarayıcıya, hiçbir yönlendirme olmadan doğrudan /pl/ sunulur; hiçbir şey eşleşmediğinde ise site İngilizceye döner. Lehçe sık görülen bir eşleşmedir: oraya o kadar çok ziyaretçi gelir ki bir gün süren bozuk küçük resimler uzun süre fark edilmeden kalamazdı.

Her tasarım önizlemesi, stil ve dil başına küçük bir dosyadır: cache/preview/2900.pl.svg. Kuraldaki desen, something.pl — bir Perl betiği — gibi dosyaları yakalamak için yazılmıştı, ama şuna da uyuyordu: 2900.pl ve ardından .svg, yani bir stil numarası, yazılışı tesadüfen bir betik uzantısıyla aynı olan bir dil kodu, sonra da gerçek dosya türü. Nokta-pl-nokta biçimindeki bir desen bu ikisini birbirinden ayıramaz.

2900.pl.svg403stil numarasıdil kodudosya türü2900.en.svg200yalnızca dil kodu farklı

Galerideki her .pl.svg ve .pl.png önizlemesi 403 Forbidden yanıtı vermeye başladı. Diğer bütün diller etkilenmedi, çünkü bu sitenin kullandığı başka hiçbir dil kodu uzantı listesindeki bir girdiyle çakışmıyor. Yalnızca bu bir tanesi.

Ne değişti

pl uzantı listesinden çıkarıldı. Liste, bu projenin endişelenmesi için gerçekten nedeni olan bütün betik uzantılarını hâlâ engelliyor; ama artık bir dili engellemiyor.

Bu olayı not etmeye değer kılan, neden yaşandığıdır: dosya uzantısı listesi ile dil kodu listesi iki ayrı sözcük dağarcığından gelir ve iki harfli bir girdinin aynı anda ikisini birden ifade etmesini hiçbir şey engellemez. Adres yolunda dil öneki bulunan bir sitede iki listeden birine ekleme yapmadan önce, eklediğiniz girdiyi öteki listeyle karşılaştırın. Burada bu karşılaştırma yapılmamıştı ve sorunu ortaya çıkaran, bozuk küçük resimleri fark eden bir okuyucu oldu — bu yüzden listede artık şu uzantının neden bulunmadığını açıklayan bir yorum var: pl; böylece listeyi bir sonraki toparlayan kişi, kuralla karşılaşmadan önce gerekçeyle karşılaşacak.

Reklam