LYK — Web Uygulama Güvenliği ve Güvenli Kod Geliştirme (5.gün)

Hatice Ergün
Jul 27, 2017 · 3 min read

Bir önceki yazı için tıklayın.

Same Origin Policy (SOP)

Bu konu için en güzel açıklayıcı senaryolar ve örnekler Ziyahan hocanın yazısında mevcut (https://www.netsparker.com.tr/blog/web-guvenligi/Same-Origin-Policy/). Ben bu konu için çok genel bir çerçeve çizip konuyu özetler nitelikte bir kaç kavramdan bahsedeceğim.

Şimdi bir html dosyasında iframe kullanarak farklı bir siteyi, oluşturduğumuz dosyanın içine ekleyelim. iframe için name değeri olarak iframe ismi verelim. Tarayıcımızda html dosyamızı çalıştıralım ve f12 tuşu ile developer tool penceresini açalım. Açılan pencerede console sekmesinde frame.location.href yazıp dosyamıza eklediğimiz siteyi çağıralım.
Developer tool bize hata verdi (DOM hatası). İframe ile eklediğimiz site gelmedi.
Burada çağırdığımız sitenin gelmemesinin sebebi same origin politikasıdır.
Her bir kaynağın kendine ait olan DOM nesneleri vardır. Bir kaynaktan öbürüne olan erişimlerde DOM mimarisi sayesinde kısıtlamalar getirilmiştir. Tarayıcılar protokol, domain ve port bilgileri ile sitelere ulaşırlar. Bu bilgiler ile oluşturulan adrese origin denir.
http://abc.com:80

Sayfalar ancak aynı origin’e sahip iseler, birbirlerinin kaynaklarına erişebilirler. Opera, firefox, safari ve chrome protokol, domain ve port bilgisi ile sayfalar arası izinleri takip eder. Explorer port kontrolü yapmaz. Bir server düşünelim, 8080 portunda bir site var ve 445 portunda farklı bir site var. Sitelerden birinde bile zafiyet bulup içeri girildiğinde explorer ile diğer portlardaki sitelere erişilebilir. Bu sebeple explorer güvenli değildir.

Cross Origin Resource Sharing (CORS)

CORS, “kökler arası kaynak paylaşımı” anlamına gelir. SOP politikası yüzünden aynı origine sahip olunmadan başka bir kaynakta, dosya içeriğini değiştiremiyoruz. Günümüz teknolojisinde buna ihtiyaç olduğu kaçınılmaz.
Hatta bazı teknolojiler sırf bu amaç için hizmet verirler. Örnek verelim, CDN (Content Delivery Network) yani içerik aktarma ağı . CDN, js dosyaları ve img dosyaları gibi statik olan dosya türlerini içinde barındıran ve sitelere bu dosyalara erişim sağlayan sunuculardır. Bir örnek verelim, facebook img dosyalarını farklı bir CDN içinde tutup oradan dosyaları çağırır. Buna SOP izin vermiyor çünkü farklı origindeler. SOP izin vermiyor ama facebook izin verdiği origin adreslerine bu sayede erişim sağlayabiliyor. Şimdi nasıl izin verildiğine bakalım.

Simple Request

Tarayıcılar eğer, GET, POST, HEAD methotlarından birini kullanarak ve Accept, Accept-Language, Content-Language, Content-Type header türlerini kullanarak istek yaparlarsa buna simple request denir. Burada izin söz konusu değildir. Tarayıcılar izin kontrolü yapmaksızın simple request gönderirler.

Prefligh Request

Simple request dışında bir methot ya da header kullanmak istenildiğinde tarayıcı izinleri öğrenebilmek için options request gönderir. Buna prefligh request (ön kontrol isteği) denir.
Bu istek paketindeki en önemli header olanı origin headerdır. Request gönderildiğinde origin headerı protokol, domain ve port bilgisini gönderir (Eğer protokol ve port bilgisi gönderilmiyorsa varsayılan olarak https ve 80 gönderilir). Örnek,

Origin: abc.com
Access-Control-Request-Method: POST
OPTİONS /ornek.html HTTP/1.1
Access-Control-Request-Header: x-user-id

Sunucudan gelen response;

Access-Control-Allow-Origin: *
Access-Control-Allow-Credenials: True

İlk header ile *(yıldız) cevabı “tüm originlere izin ver” anlamına gelir. Buraya sadece bir adres girerek sadece bu adrese izin ver diyebiliriz. İkinci header cevabı ise “cookie ile ulaşmak istenildiğinde izin ver” anlamına gelir.
Burada dikkatli olunması gereken nokta, yazılımcı gelen isteği kontrol etmeli ve gelen origini doğrudan response header paketine eklememelidir. İstek yapılan origin için sorgusuz sualsiz izin verilmemelidir.

Bir sonraki konu zafiyet türleri ve bu zafiyetleri nasıl kullanabileceğimizi anlatacağım. Öncelikle çok sık kullanacağımız bazı terimleri açıklayalım.

Dork: Popüler bir sistemde zafiyet bulunduğunda, bu sistemi kullanan siteleri listelemeye denir. Böylece o sistemi kullanan sitelere saldırı yapılabilir.
Payload: Sistemdeki zafiyetden yararlanabilinen kod parçasıdır. Saldırganın yazdığı koda denir.
Bypass: Sistemdeki zafiyet bulunup payloadına karşı önlem alınmış olsun. O önlemi de aşacak payload yazıldığı zaman buna bypass denir.

Bir sonraki yazı için tıklayın.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade