Aynı kaynak politikası

Mariko Kosaka

Aynı kaynak politikası, bir kaynaktaki dokümanların ve komut dosyalarının başka bir kaynaktaki kaynaklarla nasıl etkileşime girebileceğini kısıtlayan bir tarayıcı güvenlik özelliğidir.

Tarayıcı, birden fazla sitedeki kaynakları aynı anda yükleyip görüntüleyebilir. Aynı anda birden fazla sekme açmış olabilirsiniz veya bir site, farklı sitelerden birden fazla iframe yerleştirmiş olabilir. Bu kaynaklar arasındaki etkileşimlerde kısıtlama yoksa ve bir komut dosyası 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 engelleme okuması erişimini engelleyerek bu durumun önüne geçer. "Ama bir dakika," diyebilirsiniz, "Ben her zaman başka kaynaklardan resim ve komut dosyası yüklüyorum." Tarayıcılar, farklı bir kaynaktan kaynak yerleştirmek için birkaç etikete izin verir. Bu politika çoğunlukla geçmişten kalma bir politikadır ve sitenizi iframe'ler kullanılarak yapılan tıklama hırsızlığı gibi güvenlik açıklarına maruz bırakabilir. İçerik Güvenliği Politikası kullanarak bu etiketlerin çapraz kaynak okumasını kısıtlayabilirsiniz.

Aynı kaynak olarak kabul edilenler

Kaynak; şema (protokol olarak da bilinir, örneğin HTTP veya HTTPS), bağlantı noktası (belirtilmişse) ve ana makine ile tanımlanır. İki URL için bu üç unsurun hepsi aynıysa bu URL'ler aynı kaynaklı kabul edilir. Örneğin, http://www.example.com/foo ile http://www.example.com/bar aynı kaynaktır ancak şema farklı olduğu için https://www.example.com/bar ile aynı kaynak değildir.

Neye izin verilir ve ne engellenir?

Genellikle çapraz kaynaklı bir kaynağın yerleştirilmesine izin verilirken çapraz kaynaklı bir kaynağın okunması engellenir.

iframe'ler Çapraz kaynak yerleştirmeye genellikle izin verilir (X-Frame-Options yönergesine bağlı olarak) ancak çapraz kaynak okumaya (ör. bir iframe'deki dokümana erişmek için JavaScript kullanma) izin verilmez.
CSS Çapraz kaynak CSS, bir CSS dosyasındaki <link> öğesi veya @import kullanılarak yerleştirilebilir. Doğru Content-Type üstbilgisi gerekebilir.
formlar Çapraz kaynak URL'ler, form öğelerinin action özellik değeri olarak kullanılabilir. Web uygulamaları, form verilerini çapraz kaynak hedefine yazabilir.
çekilen resim sayısı Çapraz kaynak resimlerin yerleştirilmesine izin verilir. Ancak çapraz kaynak resim verilerinin okunması (ör. JavaScript kullanarak çapraz kaynak resimden ikili veri alma) engellenir.
multimedya Çapraz kaynak video ve ses, <video> ve <audio> öğeleri kullanılarak yerleştirilebilir.
alfabe Çapraz kaynak komut dosyaları yerleştirilebilir ancak belirli API'lere (ör. çapraz kaynak getirme istekleri) erişim engellenebilir.

TODO: DevSite - Think and Check assessment

Tıklama hırsızlığını önleme

tıklama hırsızlığı
Şekil: Clickjacking mekanizması 3 ayrı katmanda gösterilmiştir (temel site, iFrame'li site, şeffaf düğme).

"Tıklama hırsızlığı" adı verilen bir saldırı, bir siteyi iframe içine yerleştirir ve farklı bir hedefe bağlantı veren şeffaf düğmelerle kaplar. Kullanıcılar, saldırganlara veri gönderirken uygulamanıza eriştiklerini düşünmeleri için kandırılır.

Diğer sitelerin, sitenizi bir iFrame'e yerleştirmesini engellemek için HTTP üstbilgilerine frame-ancestors yönergesini içeren bir içerik güvenlik politikası ekleyin.

Alternatif olarak, HTTP üstbilgilerine X-Frame-Options ekleyebilirsiniz. Seçeneklerin listesi için MDN'ye bakın.

Özet

Tarayıcıların web'de güvenliğin bekçisi olmak için çok çalıştığını bilmek sizi biraz rahatlatmıştır. Tarayıcılar, kaynaklara erişimi engelleyerek güvenli olmaya çalışsa da bazen uygulamalarınızda çapraz kaynaklara erişmek isteyebilirsiniz. Bir sonraki kılavuzda, merkezler arası kaynak paylaşımı (CORS) ve tarayıcıya, güvenilir kaynaklardan çapraz kaynaklı kaynakların yüklenmesine izin verildiğini nasıl bildireceğiniz hakkında bilgi edineceksiniz.