Güvenlik Mekanizmaları ve Yazılımcılar
Bir çok platform, bazı güvenlik zafiyetlerine mahal vermemek için güvenlik mekanizmaları sunar. PHP bunu magic_quotes ile denedi, fakat bir çok sebepten dolayı çok mantıklı bir hareket değildi ve PHP 6 ile birlikte tarihe karışıyor.
.NET platformu üzerinde de buna benzer bir çok opsiyon mevcuttur. Örneğin XSS saldırıları için Request Validation mekanizmasını geliştirmiş ve varsayılı şartlarda bu opsiyon aktif olarak gelmektedir. Yani .NET uygulamanız hiçbir ayar yapmaksızın bir çok XSS saldırısına karşı korunmuş durumda.
Buradaki kritik nokta ise şu. Bu mekanizma bir şekilde alt edilirse, piyasadaki tüm .NET uygulamaları zafiyete maruz kalacak ve bu konuda patch çıkarmak çok basit değil. Çünkü çıkarılacak patch’i uygulamayan sistemlerde hala zafiyet olacak, çeşitli uyumluluk sorunları vs. Beraberinde gelecek. Bundan dolayı .NET Framework’de herhangi bir bug bulununca, onun giderilmesi için bir sonraki service pack ve/veya .NET sürümünü beklemelisiniz.
.NET 1.1 versiyonunda bu XSS korumasını aşmanın bir yolu bulunmuştu ve .NET 2.0 çıkana kadar XSS konusunda Request Validation’a dayanan her uygulamayı exploit edebiliyordunuz.
Bir diğer sorun ise kodun çalışacağı ortamdaki güvenlik opsiyonlarının bilinememesi sonucu developer’ların genellikle, zaten iki kere kod yazması gerekliliği. Örneğin PHP-MySQL uygulaması yazıyorsanız, genellikle magic_quotes bilgisini alıp kontrol edersiniz ve aktif değilse input’unuzu ilgili escape fonksiyonlarına gönderir ve sonrasında query’e dahil edersiniz. Eğer aktif ise doğrudan query’e ekleyebilirsiniz. Yani her halükarda iki durumu da handle etmeniz gerekiyor ise, zaten ilgili mekanizmanın bir faydasını görememiş oluyorsunuz.
İşin diğer ve sanırım en önemli kısmı ise kullanıcıların (yani yazılımcıların) bu mekanizmaları tam anlamaması sonucu doğru şekilde kullanamamaları ve zafiyete mahal vermeleri. Nasıl dediğinizi duyar gibiyim.
Basit bir örnek vermek gerekirse, integer haneye yapılan SQL Injection ataklarında magic_quotes ‘in açık olması sizi korumayacaktır. Çünkü exploit edebilmek için, hiçbir tırnak kullanmanıza gerek yok. Benzer durum .NET üzerindeki XSS koruması için de geçerli. Diyelim ki XSS şöyle bir hanede olsun :
<input type=”text” value=”<?echo $_REQUEST["input"]?>” />
Bu durumda sizi Request Validation korumayacaktır. Zira yapılacak atak şu şekildedir:
” style=”x:expression(alert(1))
Request Validation bu karakterlere kızmamaktadır. Request Validation konusunda daha detaylı bilgi almak için Onur’un Derinlemesine ASP.NET İstek Denetimi isimli yazısını okuyabilirsiniz.
Sanırım konu yeterince anlaşıldı. Kısaca platformun size sağladığı güzellik her case’i handle etmiyorsa kendi kontrolünüzü kendiniz yazın. Ediyorsa da yazmayı düşünün.
Şekilde de görüldüğü üzere içinden çıkılmaz ve anlaşılmaz bir şekilde herşeyin “As A Service” olduğu bir yöne doğru hızla ilerliyoruz. Teknolojiye yabancı olanlar için kısaca özetlemek gerekirse ihtiyacınız olan yazılıma satın almadan kiralama usulü ile sahip olma. Fakat yanılmalar olmasın bu kiralama Microsoft’un lisans kiralama mantığında değil bir subscription mantığında yapılıyor ve genellikle ihtiyacınız olan yazılıma bulut üzerinden erişiyorsunuz. Zaten en büyük avantajlarda böyle başlıyor.