Aynı kaynak politikası

Mariko Kosaka

Aynı kaynak politikası, bir kaynaktaki dokümanların ve komut dosyalarının başka bir kaynaktaki kaynaklarla etkileşim kurma şeklini kısıtlayan bir tarayıcı güvenlik özelliğidir.

Bir tarayıcı, birden çok sitedeki kaynakları aynı anda yükleyip görüntüleyebilir. Aynı anda birden fazla sekme açık olabilir veya bir site, farklı sitelerden birden fazla iframe yerleştirebilir. Bu kaynaklar arasındaki etkileşimlerle ilgili herhangi bir kısıtlama yoksa ve bir komut dosyası, bir saldırgan tarafından ele geçirilirse komut dosyası, kullanıcının tarayıcısındaki her şeyi açığa çıkarabilir.

Aynı kaynak politikası, farklı bir kaynaktan yüklenen kaynaklara okuma erişimini engelleyerek bunu önler. "Ama bekle," diyorsun, "her zaman başka kaynaklardan resim ve komut dosyası yüklüyorum." Tarayıcılar, birkaç etiketin farklı kaynakları yerleştirmesine izin verir. Bu politika çoğunlukla geçmişe dönük bir eserdir ve sitenizi iframe'ler kullanarak tıklama korsanlığı gibi güvenlik açıklarına maruz bırakabilir. Bir İçerik Güvenliği Politikası kullanarak bu etiketlerin kaynaklar arası okumasını kısıtlayabilirsiniz.

Neler aynı kaynak olarak kabul edilir?

Kaynak; şema (HTTP veya HTTPS gibi protokol olarak da bilinir), bağlantı noktası (belirtilmişse) ve ana makine tarafından tanımlanır. Üçü de iki URL için aynı olduğunda, bunların aynı kaynak olduğu kabul edilir. Örneğin, http://www.example.com/foo, http://www.example.com/bar ile aynı kaynaktır ancak şema farklı olduğu için https://www.example.com/bar değildir.

Nelere izin verilir ve nelere izin verilir?

Genel olarak, kaynaklar arası kaynağın yerleştirilmesine izin verilir ancak kaynaklar arası kaynağın okunması engellenir.

iframe'ler Kaynaklar arası yerleştirmeye genellikle (X-Frame-Options yönergesine bağlı olarak) izin verilir, ancak kaynaklar arası okumaya (bir iframe'deki bir dokümana erişmek için JavaScript kullanma gibi) izin verilmez.
CSS Kaynaklar arası CSS'ler, <link> öğesi veya bir CSS dosyasına @import kullanılarak yerleştirilebilir. Doğru Content-Type üstbilgisi gerekli olabilir.
formlar Çapraz kaynak URL'leri, form öğelerinin action özellik değeri olarak kullanılabilir. Bir web uygulaması, kaynaklar arası hedefe form verileri yazabilir.
görseller Kaynaklar arası görüntülerin yerleştirilmesine izin verilir. Ancak kaynaklar arası görüntü verilerinin okunması (JavaScript kullanarak çapraz kaynak görüntüden ikili veri alma gibi) engellendi.
multimedya Kaynaklar arası video ve ses, <video> ve <audio> öğeleri kullanılarak yerleştirilebilir.
alfabe Kaynaklar arası komut dosyaları yerleştirilebilir ancak belirli API'lere erişim (ör. kaynaklar arası getirme istekleri) engellenebilir.

YAPILACAKLAR: DevSite - Think and Check and Check değerlendirmesi

Tıklama korsanlığını önleme

tıklama korsanlığı
Şekil: 3 ayrı katmanda (temel site, iframe uygulanmış site, şeffaf düğme) gösterilen tıklama korsanlığı mekanizması.

"Clickjacking" adı verilen bir saldırı, bir siteyi iframe içine yerleştirir ve farklı bir hedefe bağlantı veren şeffaf düğmeleri yerleştirir. Saldırganlara veri gönderirken kullanıcıları kandırarak uygulamanıza eriştiklerini sanırlar.

Diğer sitelerin sitenizi bir iframe içine yerleştirmesini engellemek için HTTP üstbilgilerine frame-ancestors yönergesi içeren bir içerik güvenliği politikası ekleyin.

Alternatif olarak, HTTP üstbilgilerine X-Frame-Options ekleyebilirsiniz. Seçenekler listesi için MDN bölümüne bakın.

Son adım

Tarayıcıların web'deki güvenliğin bekçisi olmak için gayret sarf ettiği için rahatladığınızı umuyorum. Tarayıcılar kaynaklara erişimi engelleyerek güvende olmaya çalışsalar da bazen uygulamalarınızda kaynaklar arası kaynaklara erişmek isteyebilirsiniz. Bir sonraki kılavuzda, merkezler arası kaynak paylaşımı (CORS) hakkında bilgi edinin ve tarayıcıya, güvenilir kaynaklardan gelen kaynaklar arası kaynakların yüklenmesine izin verildiğini nasıl bildireceğinizi öğrenin.