Aynı menşe politikası - Same-origin policy

İçinde bilgi işlem, aynı menşe politikası (bazen şu şekilde kısaltılır: SOP) web uygulamasında önemli bir kavramdır güvenlik modeli. Politika kapsamında bir internet tarayıcısı ilk web sayfasında bulunan komut dosyalarının ikinci bir web sayfasındaki verilere erişmesine izin verir, ancak yalnızca her iki web sayfasında da aynı Menşei. Menşe, aşağıdakilerin bir kombinasyonu olarak tanımlanır: URI şeması, ana bilgisayar adı, ve Port numarası. Bu politika, bir sayfadaki kötü amaçlı bir komut dosyasının o sayfanın sayfasından başka bir web sayfasındaki hassas verilere erişimini engeller. Belge Nesnesi Modeli.

Bu mekanizma, büyük ölçüde bağlı olan modern web uygulamaları için özel bir önem taşımaktadır. HTTP tanımlama bilgileri[1] sunucular hassas bilgileri ortaya çıkarmak veya durum değiştiren eylemler gerçekleştirmek için HTTP tanımlama bilgisi bilgilerine göre hareket ettiğinden, kimliği doğrulanmış kullanıcı oturumlarını sürdürmek için. Veri gizliliği veya bütünlüğünün kaybolmasını önlemek için müşteri tarafında alakasız siteler tarafından sağlanan içerik arasında sıkı bir ayrım sağlanmalıdır.

Aynı kökenli politikanın yalnızca komut dosyaları için geçerli olduğunu hatırlamak çok önemlidir. Bu, resimler, CSS ve dinamik olarak yüklenen komut dosyaları gibi kaynaklara, ilgili HTML etiketleri aracılığıyla kaynaklardan erişilebileceği anlamına gelir.[2] (yazı tipleri dikkate değer bir istisnadır)[3]). Saldırılar, aynı kaynak politikasının HTML etiketleri için geçerli olmadığı gerçeğinden yararlanır.

Tarih

Aynı menşeli politika kavramı, Netscape Navigator 2.02 1995'te,[4] tanıtılmasından kısa bir süre sonra JavaScript Netscape 2.0'da[5][6]. JavaScript etkinleştirildi komut dosyası oluşturma web sayfalarında ve özellikle Belge Nesne Modeline (DOM) programlı erişim.

Politika başlangıçta DOM'a erişimi korumak için tasarlanmıştı, ancak o zamandan beri genel JavaScript nesnesinin hassas kısımlarını korumak için genişletildi.

Uygulama

Tüm modern tarayıcılar, önemli bir güvenlik köşe taşı olduğu için aynı kökenli politikanın bir biçimini uygular.[7] Politikaların bir spesifikasyona tam olarak uyması gerekli değildir [8] ancak genellikle diğer web teknolojileri için kabaca uyumlu güvenlik sınırlarını tanımlamak için genişletilir, örneğin Microsoft Silverlight, Adobe Flash programı veya Adobe Acrobat veya doğrudan DOM manipülasyonu dışındaki mekanizmalar için, örneğin XMLHttpRequest.

Menşe belirleme kuralları

Bir URI'nin "orijinini" hesaplamak için kullanılan algoritma, RFC 6454, Bölüm 4. Mutlak URI'lar için, kaynak üçlü {şema, ana bilgisayar, bağlantı noktası} 'dır. URI, adlandırma yetkisi olarak hiyerarşik bir öğe kullanmıyorsa (bkz. RFC 3986, Bölüm 3.2) veya URI mutlak bir URI değilse, global olarak benzersiz bir tanımlayıcı kullanılır. İki kaynağın aynı kökene sahip olduğu kabul edilir, ancak ve ancak tüm bu değerler tamamen aynı ise.

Örnek vermek gerekirse, aşağıdaki tablo, aşağıdakilere karşı kontroller için tipik sonuçlara genel bir bakış sunar. URL "http://www.example.com/dir/page.html".

Karşılaştırılan URLSonuçNedeni
http://www.example.com/dir/page2.htmlBaşarıAynı şema, ana bilgisayar ve bağlantı noktası
http://www.example.com/dir2/other.htmlBaşarıAynı şema, ana bilgisayar ve bağlantı noktası
http: //Kullanıcı adı Şifre@www.example.com/dir2/other.htmlBaşarıAynı şema, ana bilgisayar ve bağlantı noktası
http://www.example.com:81/dir/other.htmlBaşarısızlıkAynı şema ve ana bilgisayar ancak farklı bağlantı noktası
https: //www.example.com/dir/other.htmlBaşarısızlıkFarklı şema
http: //en.example.com/dir/other.htmlBaşarısızlıkFarklı ev sahibi
http: //ornek.com/dir/other.htmlBaşarısızlıkFarklı ana bilgisayar (tam eşleşme gereklidir)
http: //v2.www.example.com/dir/other.htmlBaşarısızlıkFarklı ana bilgisayar (tam eşleşme gereklidir)
http://www.example.com:80/dir/other.htmlBağlı olmakBağlantı noktası açık. Tarayıcıdaki uygulamaya bağlıdır.

Diğer tarayıcılardan farklı olarak, Internet Explorer, yerine Güvenlik Bölgesini kullanarak bağlantı noktasını kaynak hesaplamasına dahil etmez.[9]

Güvenlik uygulamaları

Aynı kaynak politikası, kimliği doğrulanmış oturumlar kullanan sitelerin korunmasına yardımcı olur. Aşağıdaki örnek, aynı kökenli politika olmadan ortaya çıkabilecek potansiyel bir güvenlik riskini göstermektedir. Bir kullanıcının bir bankacılık web sitesini ziyaret ettiğini ve çıkış yapmadığını varsayın. Ardından, kullanıcı, bankacılık sitesinden veri isteyen, arka planda çalışan bazı kötü amaçlı JavaScript kodlarının bulunduğu başka bir siteye gider. Kullanıcı bankacılık sitesinde hala oturum açtığı için, kötü amaçlı kod, kullanıcının bankacılık sitesinde yapabileceği her şeyi yapabilir. Örneğin, kullanıcının son işlemlerinin bir listesini alabilir, yeni bir işlem oluşturabilir, vb. Bunun nedeni, tarayıcının bankacılık sitesinin etki alanına bağlı olarak bankacılık sitesine oturum çerezleri gönderip alabilmesidir.

Kötü amaçlı siteyi ziyaret eden kullanıcı, ziyaret ettiği sitenin bankacılık oturumu tanımlama bilgisine erişiminin olmamasını bekler. JavaScript'in bankacılık oturumu çerezine doğrudan erişimi olmadığı doğru olsa da, bankacılık sitesinin oturum çerezi ile bankacılık sitesine talepler gönderip alabilir. Komut dosyası aslında kullanıcının yapacağı şeyi yapabildiğinden, CSRF bankacılık sitesi tarafından yapılan korumalar etkili olmayacaktır.

Aynı menşeli politikayı gevşetmek

Bazı durumlarda, aynı menşe politikası çok kısıtlayıcıdır ve birden çok alt alanlar. İlk başta, kullanmak gibi bir dizi geçici çözüm parça tanımlayıcı ya da window.name özelliği, farklı etki alanlarında bulunan belgeler arasında veri aktarımı için kullanılmıştır. Modern tarayıcılar, aynı kökenli politikayı kontrollü bir şekilde gevşetmek için birden çok tekniği destekler:

Veri lekelenmesi

Netscape Navigator kısaca bir leke kontrolü özelliği. Özellik deneysel olarak 1997'de Netscape 3'ün bir parçası olarak tanıtıldı.[10] Bu özellik varsayılan olarak kapalıdır, ancak bir kullanıcı tarafından etkinleştirilirse, web sitelerinin pencerelerin JavaScript özelliklerini okumaya çalışmasına izin verir ve çerçeveler farklı bir alana ait. Tarayıcı daha sonra kullanıcıya söz konusu erişime izin verip vermeyeceğini soracaktır.[11][12]

document.domain özelliği

İki pencere (veya çerçeve), etki alanını aynı değere ayarlayan komut dosyaları içeriyorsa, bu iki pencere için aynı kaynak ilkesi gevşetilir ve her pencere diğeriyle etkileşime girebilir. Örneğin, orders.example.com ve catalog.example.com'dan yüklenen belgelerdeki işbirliği yapan komut dosyaları, document.domain özelliklerini "example.com" olarak değiştirir, böylece belgelerin aynı kökene sahip görünmesini sağlar ve her belgenin diğerinin özelliklerini okumasını sağlar. Bu özelliğin ayarlanması, bağlantı noktasını örtük olarak null olarak ayarlar; bu, çoğu tarayıcının bağlantı noktası 80'den veya hatta belirtilmemiş bir bağlantı noktasından farklı yorumlayacaktır. Tarayıcı tarafından erişime izin verileceğinden emin olmak için, her iki sayfanın document.domain özelliğini ayarlayın.[13]

document.domain konsept, Netscape Navigator 3'ün bir parçası olarak tanıtıldı,[14] 1996'da piyasaya sürüldü.[10]

Kaynaklar Arası Kaynak Paylaşımı

Aynı menşeli politikayı gevşetmek için diğer teknik, adı altında standartlaştırılmıştır. Kaynaklar Arası Kaynak Paylaşımı. Bu standart, HTTP'yi yeni bir Kaynak istek başlığı ve yeni bir Access-Control-Allow-Origin yanıt başlığı ile genişletir.[15] Sunucuların bir dosya talep edebilecek kaynakları açık bir şekilde listelemek veya bir joker karakter kullanmak ve bir dosyanın herhangi bir site tarafından istenmesine izin vermek için bir başlık kullanmasına izin verir. Firefox 3.5, Safari 4 ve Internet Explorer 10 gibi tarayıcılar, aksi takdirde aynı kökenli politika tarafından yasaklanacak olan çapraz kaynak HTTP isteklerine XMLHttpRequest ile izin vermek için bu başlığı kullanır.

Belgeler arası mesajlaşma

Başka bir teknik, belgeler arası mesajlaşma bir sayfadaki bir komut dosyasının metin mesajlarını, komut dosyası kaynağından bağımsız olarak başka bir sayfadaki bir komut dosyasına iletmesine izin verir. Bir Window nesnesinde postMessage () yönteminin çağrılması, bu pencerede bir "onmessage" olayını eşzamansız olarak tetikleyerek herhangi bir kullanıcı tanımlı olay işleyicisini tetikler. Bir sayfadaki bir komut dosyası, diğer sayfadaki yöntemlere veya değişkenlere hala doğrudan erişemez, ancak bu mesaj geçirme tekniği aracılığıyla güvenli bir şekilde iletişim kurabilirler.

JSONP

HTML'den beri <script> öğelerinin diğer etki alanlarından içerik almasına ve yürütmesine izin verilir, bir sayfa aynı kaynak politikasını atlayabilir ve JSONP yükü döndüren bir kaynak yükleyerek farklı bir etki alanından JSON verilerini alabilir. JSONP yükleri, önceden tanımlanmış bir işlev çağrısı tarafından sarılmış dahili bir JSON yükünden oluşur. Komut dosyası kaynağı tarayıcı tarafından yüklendiğinde, sarılmış JSON yükünü işlemek için atanmış geri çağrı işlevi çağrılır.

WebSockets

Modern tarayıcılar, bir komut dosyasının, aynı kaynak ilkesini uygulamadan bir WebSocket adresine bağlanmasına izin verecektir. Ancak, bir WebSocket URI kullanıldığını anlarlar ve bir Menşei: Bağlantıyı isteyen komut dosyasının kaynağını belirten istek başlığı. Siteler arası güvenliği sağlamak için, WebSocket sunucusu başlık verilerini yanıt almasına izin verilen bir beyaz listeyle karşılaştırmalıdır.

Köşe kılıfları

Aynı menşeli kontrollerin ve ilgili mekanizmaların davranışı, URL'leriyle ilişkili açıkça tanımlanmış bir ana bilgisayar adı veya bağlantı noktası olmayan sözde protokoller gibi bazı köşe durumlarda iyi tanımlanmamıştır (dosya:, veriler :, vb.). Bu, tarihsel olarak, yerel olarak depolanan herhangi bir HTML dosyasının diskteki diğer tüm dosyalara erişme veya İnternet üzerindeki herhangi bir site ile iletişim kurma genel olarak istenmeyen yeteneği gibi oldukça fazla sayıda güvenlik sorununa neden oldu.

Son olarak, DNS yeniden bağlama veya sunucu tarafı proxy'ler gibi belirli saldırı türleri, ana bilgisayar adı kontrolünün kısmen altüst olmasına izin verir ve hileli web sayfalarının, "gerçek", kanonik adresler dışındaki adresler aracılığıyla sitelerle doğrudan etkileşime girmesini mümkün kılar. Menşei. Bu tür saldırıların etkisi çok özel senaryolarla sınırlıdır, çünkü tarayıcı hala saldırganın sitesiyle etkileşime girdiğine inanır ve bu nedenle üçüncü taraf çerezlerini veya diğer hassas bilgileri saldırgana ifşa etmez.

Aynı menşe politikası karşısındaki saldırılar

Aynı kaynak politikası yürürlükte olduğunda bile (Çapraz Kaynak Paylaşımı tarafından gevşetilmeden), bazı çapraz kaynaklı bilgisayar saldırıları gerçekleştirilebilir. WebRTC bir mağdurun dahili IP adresini bulmak için kullanılabilir.[16] Bir çapraz kaynak bağlantı noktasına bağlanmaya çalışılırsa, yanıtlar aynı kaynak ilkesi karşısında okunamaz, ancak bir JavaScript, yükleme / hata olayının tetiklenip tetiklenmediğini kontrol ederek bağlantı noktasının açık mı kapalı mı olduğu konusunda çıkarımlar yapabilir. mola alıyoruz. Bu, çapraz kaynaklı bağlantı noktası tarama için fırsatlar sağlar. Ayrıca, bir JavaScript, varsayılan dosyalardan yararlanarak hizmetleri çapraz kaynaklı olarak bile parmak izi alabilir. Örneğin, evil.com sitesinden yüklenen bir JavaScript, dosyayı açmaya çalışırsa http://127.0.0.1/images/jenkins.png ve onload olayı tetiklendiğinde, kurbanın Jenkins'i kendi bilgisayarında çalıştırdığı sonucuna varılabilir. Bu şekilde, saldırgan potansiyel olarak savunmasız hizmetleri, örneğin iç ağda, aynı kökenli politika karşısında bile bulabilir. Herhangi bir hizmetin Siteler Arası İstek Sahteciliğine karşı savunmasız olması durumunda, hizmetlerin güvenliği ihlal edilebilir.[17]

Ayrıca bakınız

daha fazla okuma

Referanslar

  1. ^ IETF HTTP Durum Yönetim Mekanizması, Nisan 2011
  2. ^ Kemp, John (2011-02-04). "Web'de Güvenlik". Alındı 2018-07-24. Aynı kaynak ilkesi, benzersiz bir kaynaktan gelen bir belgenin yalnızca belgenin yüklendiği kaynaktan kaynak yükleyebileceğini belirtir. Bu özellikle bir belge içinden yapılan XMLHttpRequest çağrıları için geçerlidir. Görüntüler, CSS ve dinamik olarak yüklenen komut dosyaları aynı kaynak politikasına tabi değildir.
  3. ^ "@ font-face". MDN Web Belgeleri. Alındı 2018-07-24. Web yazı tipleri, bu kısıtlamayı gevşetmek için HTTP erişim kontrolleri kullanılmadığı sürece, aynı etki alanı kısıtlamasına tabidir (yazı tipi dosyaları, bunları kullanan sayfayla aynı etki alanında olmalıdır).
  4. ^ "Netscape 3.0 El Kitabı - İleri düzey konular". netscape.com. Arşivlenen orijinal 2002-08-08 tarihinde. Alındı 2020-02-16. Navigator 2.02 ve sonraki sürümleri, bir sunucudaki komut dosyalarının farklı bir sunucudaki belgelerin özelliklerine erişmesini otomatik olarak engeller.
  5. ^ "JavaScript 1.0 - 1995". www.webdesignmuseum.org. Alındı 2020-01-19.
  6. ^ "Netscape Navigator Sürüm 2.0'a Hoş Geldiniz". netscape.com. 1997-06-14. Arşivlenen orijinal 1997-06-14 tarihinde. Alındı 2020-02-16.
  7. ^ "Tarayıcı Güvenliği El Kitabı, bölüm 2". google.com. Alındı 31 Ocak 2014.
  8. ^ "Aynı Menşe Politikası". W3C. Alındı 31 Ocak 2014.
  9. ^ Lawrence, Eric. "IEInternals - Aynı Menşe Politikası Bölüm 1". Alındı 22 Ekim 2013.
  10. ^ a b "Netscape Navigator 3.0 - Yenilikler". netscape.com. 1997-06-14. Arşivlenen orijinal 1997-06-14 tarihinde. Alındı 2020-02-16.
  11. ^ "JavaScript 1.3 Kılavuzu - Güvenlik". netscape.com. 2003-02-21. Arşivlenen orijinal 2003-02-21 tarihinde. Alındı 2020-02-16.
  12. ^ "JavaScript 1.3 Kılavuzu - Güvenlik". docs.oracle.com. Arşivlendi 2012-08-24 tarihinde orjinalinden. Alındı 2020-02-16.
  13. ^ LePera, Scott. "Alanlar arası güvenlik sorunları". JavaScript'in Garip Zen. Alındı 4 Nisan 2014.
  14. ^ "Netscape 3.0 - JavaScript El Kitabı". netscape.com. Arşivlenen orijinal 2002-10-03 tarihinde. Alındı 2020-02-16.
  15. ^ WSGI Ara Yazılımının Oluşturulması
  16. ^ JavaScript ile dahili IP adresini bulma
  17. ^ Bir tarayıcıyı proxy olarak kullanarak halka açık İnternetten dahili ağa saldırmak

Dış bağlantılar