Aynı kaynak politikası, bir kaynaktaki dokümanların ve komut dosyalarının başka bir kaynaktaki kaynaklarla nasıl etkileşime geçebileceğini kısıtlayan bir tarayıcı güvenlik özelliğidir.
Tarayıcılar, birden fazla siteden kaynakları aynı anda yükleyip görüntüleyebilir. Aynı anda birden fazla sekmeniz açık olabilir veya bir site farklı sitelerden birden fazla iframe yerleştirmiş olabilir. Bu kaynaklar arasındaki etkileşimler üzerinde 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ında bulunan her şeyi açığa çıkarabilir.
Aynı kaynak politikası, farklı bir kaynaktan yüklenen kaynaklara okuma erişimini engelleyerek bunun olmasını önler. "Ama bekleyin," diyebilirsiniz, "Her zaman diğer kaynaklardan resim ve komut dosyası yüklüyorum." Tarayıcılar, birkaç etiketin farklı bir kaynaktan kaynak yerleştirmesine izin verir. Bu politika çoğunlukla geçmişe ait bir yapıdır ve sitenizi iFrame'ler kullanılarak yapılan tıklama tuzaklarına maruz bırakabilir. İçerik Güvenliği Politikası kullanarak bu etiketlerin kaynaktan bağımsız olarak okunmasını kısıtlayabilirsiniz.
Aynı kaynaktan sunma ne anlama gelir?
Kaynak, şema (ör. HTTP veya HTTPS gibi protokol olarak da bilinir), bağlantı noktası (belirtilmişse) ve ana makine ile tanımlanır. İki URL için bu üç öğenin tümü aynı olduğunda aynı kaynaktan oldukları kabul edilir. Örneğin, http://www.example.com/foo
, http://www.example.com/bar
ile aynı kaynaktır ancak şeması farklı olduğu için https://www.example.com/bar
ile aynı değildir.
Hangi içeriklere izin verilir, hangileri engellenir?
Genel olarak, kaynakta çapraz kaynaklı bir kaynağın yerleştirilmesine izin verilirken kaynakta çapraz kaynaklı bir kaynağın okunması engellenir.
iframe'ler |
Kaynaklar arası yerleştirmeye genellikle izin verilir (X-Frame-Options yönergesine bağlı olarak) ancak kaynaklar arası okumaya (ör. bir iframe'deki dokümana erişmek için JavaScript kullanmak) izin verilmez.
|
CSS |
Kaynaklar arası CSS, CSS dosyasında <link> öğesi veya @import kullanılarak yerleştirilebilir. Doğru Content-Type başlığı gerekebilir.
|
formlar |
Kaynaklar arası URL'ler, form öğelerinin action özellik değeri olarak kullanılabilir. Bir web uygulaması, form verilerini kaynakta farklı bir hedefe yazabilir.
|
görseller | Çapraz kaynaklı resimlerin yerleştirilmesine izin verilir. Ancak kaynaklar arası resim verilerinin okunması (ör. JavaScript kullanarak kaynaklar arası bir resimden ikili veri almak) engellenir. |
multimedya |
Kaynaklar arası video ve ses, <video> ve <audio> öğeleri kullanılarak yerleştirilebilir.
|
alfabe | Kökler arası komut dosyaları yerleştirilebilir ancak belirli API'lere (ör. kökler arası getirme istekleri) erişim engellenebilir. |
TODO: DevSite - Think and Check assessment
Tıklama tuzakçılığını önleme

"Tıklama tuzakçılığı" adı verilen bir saldırıda, bir site iframe
içine yerleştirilir ve farklı bir hedefe yönlendiren şeffaf düğmeler yerleştirilir. 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 üst bilgilerine frame-ancestors
direktifi içeren bir içerik güvenliği politikası ekleyin.
Alternatif olarak, HTTP üstbilgilerine X-Frame-Options
ekleyebilirsiniz. Seçenekler listesi için MDN'ye bakın.
Son adım
Tarayıcıların web'de güvenliğin bekçisi olmak için yoğun şekilde çalıştığından biraz olsun rahatlamışsınızdır. Tarayıcılar, kaynaklara erişimi engelleyerek güvenli olmaya çalışsa da bazen uygulamalarınızda kaynakta farklı olan kaynaklara erişmek isteyebilirsiniz. Sonraki kılavuzda, merkezler arası kaynak paylaşımı (CORS) ve tarayıcıya, güvenilir kaynaklardan merkezler arası kaynakların yüklenmesine izin verildiğini nasıl bildireceğiniz hakkında bilgi edinin.