|
Hani bazen, html kodlarken charset tanımlamayız(var mı hâla tanımlamayan?) veya olur da ne bileyim, charset tanımlamasının daha da üstünde kullanıcı tarafından değiştirilebilen bir şeyler bırakırız (title???). İşte o zaman, XSS (Cross site scripting) açıklarına maruz kalabilirmişiz az önce okudum, şaşırdım.
Tarayıcıların "otomatik dil seçimi", sayfa içinde bazı karakterler arayıp, o karakterleri belli karakter kodlamaları ile eşleştirmesiyle gerçekleşiyor. Yani, siz HTTP headerlarda veya meta charset ile karakter kodlaması belirtmezseniz, ve kodlarınızın içinde utf-8'e özel bir karakter varsa, tarayıcı tüm sayfayı utf-8 gibi yorumlayabilir.
Bu açık da bu davranışın kötü kullanılması ile oluşuyor aslında. Şöyle ki; herhangi bir karakter kodlaması belirtmediğiniz takdirde, sayfa içinde utf-7 karakterleri varsa (ki az sonra anlatacağım) sayfa, utf-7 olarak işleniyor ve siz XSS'e maruz kalabiliyorsunuz.
Açığı, şurası detaylıca anlatıyor : http://openmya.hacker.jp/hasegawa/public/20071107/s6/h6.html?file=datae.txt
Kısaca, UTF-7'de bazı özel karaterler (< veya > gibi) encode ediliyor (+ADw- veya +AD4- gibi). Tarayıcı bunları decode edince normal olarak yorumlayıp yoluna devam ediyor. En basit XSS atak denemesi olan
<script>alert('foo')</script>
bu durumda aslında
+ADw-script+AD4- alert('foo'); +ADw-/script+AD4-
Basitçe yaptığınız "özel html karakterlerini temizle(htmlspecialchars)" veya "html tag'lerini uçur(strip_tags)" gibi yöntemler yukarıdaki örnekte işe yaramamış oluyor böylece. Ve eğer bir şekilde tarayıcınız bu kodu UTF-7 olarak yorumlarsa XSS ile güzel günler sizi bekliyor oluyor.
Korunmak için;
1) HTTP header'larda ve/veya meta tag'lerinde hangi karakter setini kullandığınızı özellikle belirtin. Yapılan en büyük hatalardan bir tanesi de utf-8 karakter seti kullanmak için utf8 belirtmektir. Doğrusu utf-8 olmalıdır.
2) meta charset tanımlamasından önce kullanıcı tarafından değiştirilebilir bir veri olmadığından emin olun. Burada en çok <title> etiketi kullanılabilir. Kullanıcıdan alınan veriden bir şekilde <title> etiketi arasındaki metin üretiliyor olabilir.
<title>Hoşgeldin +ADw-script+AD4- alert('foo'); +ADw-/script+AD4-</title> gibi bir kod, eğer Explorer kullanıyorsanız(damn!) ve karakter seti tanımlamadıysanız canınızı yakabilir.
Google'da "utf-7 xss" keyword'ü ile bir çok sonuç bulabilirsiniz. Güvenlik zor zanaât vesselam. |
|
23.Mayıs.2011 Pazartesi
:: 17:45:41 |
55465 kere okundu |
|
|
Takvim |
|
|
< Ocak 2025 > |
P | S | Ç | P | C | Ct | Pz |
| | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
|
|
|
|
|
|