İçeriğe atla

Kökler Arası Kaynak Paylaşımı

Cross-Origin Resource Sharing (CORS), bir web sayfası üzerindeki bazı kaynakların (örneğin font dosyaları), kaynağın sunulduğu alan adının dışındaki bir alan adından istenebilmesine izin veren bir mekanizmadır. Bir web sayfası, özgürce kökler arası resimleri, stil sayfalarını, betikleri ve videoları ekleyebilmektedir.[1] Ancak, bazı “alanlar arası” istekler, özellikle Ajax istekleri, Aynı Kök Politikası nedeniyle varsayılan olarak yasaklanmıştır.

CORS, kökler arası isteklerin güvenli olup olmadığına karar vermek için tarayıcı ve sunucu arasında bir etkileşimin nasıl yapılacağını tanımlamaktadır.[2] Aynı kök isteklerine oranla daha fazla özgürlük ve işlevsellik sağlamaktadır, ancak basitçe tüm kökler arası isteklere izin vermekten daha güvenlidir. W3C tarafından da önerilen standart olmuştur.[3]

CORS güvenlik ile ilgili değildir, içerik sahipliğinin korunması ile ilgilidir. Saldırganların Aynı Kök Politikası'na (SOP) uyması beklenmemelidir. CORS pek çok tarayıcı üzerinden kolayca devre dışı bırakılabilmektedir.

CORS nasıl çalışır?

CORS standardı, tarayıcı ve sunucuların izinleri olması halinde uzak URL’lere istekte bulunabileceği bir yöntem sunan yeni HTTP başlıkları tanımlamaktadır. Bazı doğrulama ve yetkilendirme sunucu tarafından yapılsa da, bu başlıkları desteklemek ve belirttikleri kısıtlamaları uygulamak tarayıcıların sorumluluğundadır.

Veriyi değiştirebilen Ajax ve HTTP istek metotları (genellikle GET dışındaki HTTP metotları veya bazı MIME türleri ile POST kullanımı) için, tanımlama, tarayıcıların sunucudan HTTP OPTIONS istek metodu ile desteklenen metotları öğrenerek ve sunucudan onay aldıktan sonra asıl HTTP metodu ile asıl isteği göndererek bir ön kontrol yapmalarını zorunlu tutmaktadır. Sunucular, login bilgilerinin (çerezler ve HTTP kimlik doğrulama verisi dahil) isteklerle birlikte gönderilip gönderilememesi konusunda istemcileri de bilgilendirebilmektedir.[4]

Basit bir örnek

Aynı Kök Politikası kullanılırken, genelde uygun olmamaktadır. CORS uyumlu bir tarayıcı kökler arası bir istek yapmak istediğinde:

  1. Tarayıcı HTTP Origin başlığı ile bir OPTIONS isteği göndermektedir. Bu başlığın değeri, ana sayfayı sunan alan adı olmaktadır. http://example.com alan adından bir sayfa, service.example.com üzerindeki bir kullanıcı verisine erişmek istediğinde, aşağıdaki istek başlığı service.example.com’a gönderilecektir:
    Origin: http://www.example.com
  2. service.example.com üzerindeki sunucunun cavabı aşağıdakileri içerebilir:
    • Hangi kök sayfalarına izin verildiğini gösteren bir Access-Control-Allow-Origin (ACAO) başlığı. Örneğin:
      Access-Control-Allow-Origin: http://www.example.com
    • Eğer sunucu kökler arası isteklere izin vermiyorsa bir hata sayfası
    • Tüm alan adlarına izin veren bir karakter içeren Access-Control-Allow-Origin (ACAO) başlığı:
      Access-Control-Allow-Origin: *

Bir karakter aynı kök politikası, bir sayfa veya API tamamen erişilebilir bir içerik olarak düşünüldüğünde ve herhangi bir site üzerindeki herhangi bir kod dahil herkes için erişilebilir olması amaçlandığında uygundur. Örneğin, Google Fonts gibi genel bir servis sunucusu üzerindeki bir web fontu.

Yıldız karakterli aynı kök politikası, sayfaların tahmin edilemez URL’lere sahip olduğu ve bunu bilen kişiler tarafından erişilebilir olduğu varsayılan nesne yeterlilik modelinde yaygın olarak kullanılmaktadır.

“*” değeri, HTTP kimlik doğrulama, istemci taraflı SSL sertifikaları ve çerezlerin gönderilmesine izin vermemesi açısından önem taşımaktadır.[5]

CORS mimarisinde, ACAO başlığı asıl web uygulama sunucusu (www.example.com) tarafından değil harici web servisi (service.example.com) tarafından belirlenmektedir. CORS, web servisin web uygulamasına kaynaklarını kullanması için yetkilendirmesine izin vermektedir ve uygulama tarafından erişilen harici servisleri kontrol etmemektedir. İkincisi için, İçerik Güvenlik Politikası kullanılmalıdır (connect-src direktifi).

Ön Kontrol örneği

Bazı kökler arası Ajax istekleri gönderilirken, CORS’u destekleyen modern tarayıcılar, belirtilen aksiyonu yapma yetkisinin olup olmadığına karar vermek için ilave bir "ön kontrol" isteği eklemektedir.

OPTIONS /
Host: service.example.com
Origin: http://www.example.com

Eğer service.example.com isteği kabul etmek istiyorsa, aşağıdaki başlıklarla cevap verebilir:

Access-Control-Allow-Origin: http://www.example.com Access-Control-Allow-Methods: PUT, DELETE

Başlıklar

CORS ile ilgili HTTP başlıkları

İstek başlıkları

  • Origin
  • Access-Control-Request-Method
  • Access-Control-Request-Headers

Cevap başlıkları

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers

Tarayıcı Desteği

CORS, aşağıdaki tarayıcı görüntüleme motorlarına dayanan tüm tarayıcılar tarafından desteklenmektedir:

Aşağıdaki tarayıcılarda CORS desteği bulunmamaktadır:

  • Camino 2.0.x sürümlerinde CORS'u uygulamamaktadır, çünkü bu sürümler Gecko 1.9.0 tabanlıdır.[16]
  • 0.10.2 versiyonu ile beraber, Arora WebKit'in CORS ile ilgili API'lerini kullanmaktadır, ancak kökler arası istekler başarısız olmaktadır.[17]

Tarih

Kökler arası destek, VoiceXML tarayıcılarında güvenli kökler arası veri isteklerine izin vermek için VoiceXML 2.1[18] sürümünde yer alması için Mart 2004'te Tellme Networks çalışanlarından Matt Oshry, Brad Porter ve Michael Bodell tarafından önerilmiştir. Mekanizma VoiceXML’e özgü olmayan genel bir yapıya sahip olarak kabul edilmiştir ve sonrasında bir uygulama notu olarak ayrılmıştır.[19] Ana tarayıcı sağlayıcılarından katılımcılarla birlikte W3C WebApps Çalışma Grubu, bu notu resmi W3C Öneri durumuna getirmek üzere W3C Çalışma Taslağı olarak resmîleştirmeye başlamıştır.

Mayıs 2006'da ilk W3C Çalışma Taslağı sunulmuştur.[20] Mart 2009'da taslak "Cross Origin Resource Sharing"[21] olarak isim değiştirmiştir ve Ocak 2014'te bir W3C Önerisi olarak kabul edilmiştir.[22]

CORS vs JSONP

CORS, JSONP’ye karşı modern bir alternatif olarak da kullanılabilmektedir. JSONP sadece GET isteklerini desteklerken, CORS diğer HTTP istek türlerini de desteklemektedir. CORS kullanımı, JSONP’den daha iyi hata işleme imkânları sunan XMLHttpRequest’lerin web programcıları tarafından kullanılabilmesine imkân tanımaktadır. CORS pek çok modern tarayıcı tarafından desteklenmektedir. JSONP, harici site ele geçirildiğinde siteler arası betik çalıştırma (XSS) sorunlarına yol açabilirken, CORS güvenliği sağlamak için web sayfalarının cevapları manuel olarak işlemesine izin vermektedir.[23]

Ayrıca bakınız

  • İçerik Güvenlik Politikası
  • Dokümanlar Arası Mesajlaşma
  • JSONP

Kaynakça

  1. ^ "Same-origin policy / Cross-origin network access". MDN. 12 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Nisan 2017. 
  2. ^ "Cross-domain Ajax with Cross-Origin Resource Sharing". NCZOnline. 29 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  3. ^ "Cross-Origin Resource Sharing". 6 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Nisan 2017. 
  4. ^ "cross-site xmlhttprequest with CORS". MOZILLA. 21 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Eylül 2012. 
  5. ^ Cross-Origin Resource Sharing 6 Mart 2017 tarihinde Wayback Machine sitesinde arşivlendi..
  6. ^ "Blink". QuirksBlog. Nisan 2013. 29 Aralık 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2013. 
  7. ^ "Google going its own way, forking WebKit rendering engine". Ars Technica. Nisan 2013. 6 Nisan 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2013. 
  8. ^ "HTTP access control (CORS) - MDN". Developer.mozilla.org. 15 Temmuz 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  9. ^ "Gecko - MDN". Developer.mozilla.org. 8 Haziran 2012. 3 Ağustos 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  10. ^ "What makes Camino Special". 8 Eylül 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Şubat 2013. 
  11. ^ Tony Ross; Program Manager; Internet Explorer (9 Şubat 2012). "CORS for XHR in IE10". MSDN. 5 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Aralık 2012. 
  12. ^ David Honneffer, Documentation Specialist (14 Haziran 2012). "12.00 for UNIX Changelog". Opera. 5 Haziran 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  13. ^ David Honneffer, Documentation Specialist (23 Nisan 2012). "Opera Software: Web specifications support in Opera Presto 2.10". Opera.com. 11 Eylül 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  14. ^ on July 6, 2009 by Arun Ranganathan (6 Temmuz 2009). "cross-site xmlhttprequest with CORS ✩ Mozilla Hacks – the Web developer blog". Hacks.mozilla.org. 21 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  15. ^ "59940: Apple Safari WebKit Cross-Origin Resource Sharing Bypass". Osvdb.org. 19 Temmuz 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  16. ^ "HTTP Access Control in Camino • mozillaZine Forums". Forums-test.mozillazine.org. 3 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  17. ^ "Issue 904 - arora - Arora providing API for CORS (Cross-Origin Resource Sharing) but fails in actual use - Cross Platform WebKit Browser - Google Project Hosting". Code.google.com. 4 Eylül 2010. 17 Mayıs 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  18. ^ "Voice Extensible Markup Language (VoiceXML) 2.1". W3.org. 23 Mart 2004. 23 Eylül 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  19. ^ "Authorizing Read Access to XML Content Using the <?access-control?> Processing Instruction 1.0". W3.org. 19 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Temmuz 2012. 
  20. ^ "Authorizing Read Access to XML Content Using the <?access-control?> Processing Instruction 1.0 W3C - Working Draft 17 May 2006". W3.org. 2 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Ağustos 2015. 
  21. ^ "Cross-Origin Resource Sharing - W3C Working Draft 17 March 2009". W3.org. 17 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Ağustos 2015. 
  22. ^ "Cross-Origin Resource Sharing - W3C Recommendation 16 January 2014". W3.org. 17 Haziran 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Ağustos 2015. 
  23. ^ "When can I use... Cross Origin Resource Sharing". caniuse.com. 8 Nisan 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Temmuz 2012. 

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">HTTP</span> iletişim protokolü

HTTP bir kaynaktan dağıtılan ve ortak kullanıma açık olan hiperortam bilgi sistemleri için uygulama seviyesinde bir iletişim protokolüdür. HTTP, World Wide Web için veri iletişiminin temelidir; burada köprü metni belgeleri, örneğin bir fare tıklamasıyla veya bir web tarayıcısında ekrana dokunarak kullanıcının kolayca erişebileceği diğer kaynaklara köprüler içerir.

<span class="mw-page-title-main">RSS</span>

RSS, genellikle haber sağlayıcıları, bloglar ve podcastlar tarafından kullanılan, yeni eklenen içeriğin kolaylıkla takip edilmesini sağlayan bir web sayfası bildirimcisidir. Kullandığı dosya biçimleri .rss ve .xml'dir.

XML Bağlantı Dili veya kısaca XLink, XML dokümanlarının bağlantılarını yönetmeye yarayan bir dildir. W3C standardıdır.

<span class="mw-page-title-main">Ölçeklenebilir Vektör Grafikleri</span> 1999 yılından bu yana W3C Konsorsiyumu tarafından geliştirilen açık standart XML tabanlı bir vektörel grafik biçimi

Ölçeklenebilir Vektör Grafikleri, 1999 yılından bu yana W3C Konsorsiyumu tarafından geliştirilen açık standart XML tabanlı bir vektörel grafik biçimidir. W3C Konsorsiyumu tarafından kullanımı tavsiye edilen bir dosya biçimidir.

Kaynak Tanımlama Çerçevesi, metadata model olarak tasarlanmış bir World Wide Web Consortium (W3C) spesifikasyonu olmasına rağmen, çeşitli sözdizim biçemlerinde bilgi modellemek için kullanılan genel bir metoda dönüşmüştür.

<span class="mw-page-title-main">SOAP</span>

SOAP , Service-oriented Architecture felsefesini pratiğe uyarlayan iki interface'den biridir. Üzerinde bulunan Universal Description Discovery and Integration (UDDI) ile birlikte hizmet yönelimli mimarinin pratikte kullanılmasını mümkün kılar.

Apache Wicket veya kısaca Wicket Java programlama dili için bileşen tabanlı hafif bir web uygulama kütüphanesidir. Jonathan Locke tarafından geliştirilmeye başlanmış ve ilk sürümü 2005 yılında çıkmıştır.

<span class="mw-page-title-main">HTML5</span> web programlama dili HTMLnin en güncel sürümü

HTML5, İnternet'in çekirdek teknolojilerinden HTML işaretleme standardının beşinci sürümüdür. Internet Explorer, Mozilla Firefox ve Opera tarayıcılarının güncel sürümleri tarafından kısmen desteklenmektedir. Kısaca H5 Google Chrome ve Safari tarayıcılarının güncel sürümleri üzerinde deneme aşamasında da olsa çok daha iyi bir şekilde çalışmaktadır. Günümüzde kullanılan HTML 4.1 sürümü, CSS desteğiyle ne kadar düzenli ve sağlam bir yapıda kodlanırsa kodlansın, yine de fazladan yazılan kodların fonksiyonelliğini bozduğu bilinmektedir. Bu yüzden HTML5, bu ihtiyaçları karşılamak adına geliştirilmeye başlanmıştır. Video paylaşım sitesi YouTube, deneme aşamasında HTML5'i kullanıcılarına sunmaktadır.

<span class="mw-page-title-main">WebGL</span>

WebGL, kâr amacı gütmeyen teknoloji şirketler birliği Khronos Group tarafından yönetilen, web ortamında 3 boyutlu grafik çizimi sağlanmasını amaçlayan bir web standardıdır. OpenGL ES 2.0 üzerine temellendirilmiştir, otomatik hafıza yönetimli JavaScript gibi dillere uyum sağlaması için küçük değişikliklere uğramış olsa da WebGL OpenGL ES'ten çok da farklı değildir. Uyumlu web tarayıcısında herhangi bir eklenti kurulmasını gerektirmeden, HTML5'in Canvas elementi üzerinde 3 boyutlu grafik çizimi yapılmasını mümkün kılmaktadır.

VoiceXML (VXML), insan ile bilgisayar arasındaki interaktif medya ve ses diyaloglarını belirten dijital dosya standardıdır. Otomatik müşteri hizmetleri servisi ve banka sistemleri gibi sesli cevap kullanımının olduğu uygulamaların geliştirilmesinde kullanılır.

<span class="mw-page-title-main">WebSocket</span> bilgisayar iletişim protokolü

WebSocket, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalı sağlayan bir bilgisayar iletişim protokolüdür. WebSocket protokolü IETF tarafından 2011 yılında RFC 6455 ile standart hale getirilmiş ve WebIDL içerisindeki WebSocket API W3C tarafından standart hale getirilmektedir.

Siteler arası betik çalıştırma, genellikle web uygulamalarında görülen, genellikle HTML enjeksiyonu zafiyetiyle birlikte ortaya çıkan veya Java Script kullanan bazı aplikasyonlarda bulunan bir güvenlik açıklığıdır. XSS, diğer kullanıcılar tarafından görüntülenen web sayfalarına istemci taraflı Java Script kodunun enjekte edilmesine imkân verir. Siteler arası betik çalıştırma açıklığı, saldırganlar tarafından aynı kök politikası gibi bazı erişim kontrollerini atlatmak ve hedef adresin oturum katmanını ele geçirmek için kullanılabilmektedir. Web sayfaları üzerinde gerçekleştirilen siteler arası betik çalıştırma saldırıları, 2007 itibarıyla Symantec'in raporladığı tüm güvenlik açıklıklarının yaklaşık olarak %84'ünü oluşturmaktadır. Zafiyet içeren sitenin işlediği verinin hassasiyetine ve site sahibi tarafından uygulanan güvenlik tedbirlerine bağlı olarak, etkisi ufak bir aksamadan önemli bir güvenlik riskine kadar değişebilmektedir.

Aynı kök politikası web uygulamaları güvenlik modelinde önemli bir unsurdur. Bu politikaya göre, bir web tarayıcısı, bir web sayfasında yer alan betiklerin ikinci bir web sayfası üzerindeki veriye erişimine sadece bu iki sayfa aynı köke sahipse izin vermektedir. Bir kök, URI şeması, hostname ve port numarasının bir kombinasyonu olarak tanımlanmaktadır. Bu politika, bir sayfada bulunan kötücül betiğin başka bir sayfada bulunan hassas verilere erişimini, o sayfanın Belge Nesnesi Modeli aracılığıyla engellemektedir.

<span class="mw-page-title-main">Favicon</span> Belli bir ağ sayfasının küçük simgesi

Favicon, kısayol simgesi, website ikonu, sekme ikonu, URL ikonu veya yer imi ikonu olarak da bilinir, bir veya daha fazla küçük simge içeren bir dosyadır, belirli bir web sitesi veya web sayfası ile ilişkili. Bir web grafik tasarımcısı böyle bir simge yaratabilir ve onu bir web sitesine çeşitli yollarla yükleyebilir ve ardından grafiksel web tarayıcısı bundan yararlanabilir. Favicon desteği sağlayan tarayıcılar tipik olarak bir tarayıcının faviconunu adres çubuğu ve yer imleri listesinde sayfanın adının yanında gösterir. Sekmeli tarayıcı özelliğini destekleyen tarayıcılar tipik olarak sekmedeki sayfanın başlığının yanında bir sayfanın favicon'unu gösterir ve siteye özgü tarayıcı favicon'u masaüstü simgesi olarak kullanır.

HTTP Katı Taşıma Güvenliği (HSTS), web sitelerini protokol indirgeme ve oturum çalma saldırılarına karşı korumaya yardımcı olan bir web güvenlik politikası mekanizmasıdır. Web sunucuları, kendisine gönderilen isteklerin yalnızca HTTPS üzerinden olması gerektiğini web tarayıcılarına bu mekanizma ile belirtir. Bu sayede kullanıcı, herhangi bir güvenlik çözümü sunmayan HTTP yerine Taşıma Katmanı Güvenliği (TLS/SSL) sağlayan HTTPS kullanarak ilgili web sitesine erişim sağlar. HSTS, RFC 6797 ile detaylandırılan bir IETF Standards Track protokolüdür.

WebRTC, web tarayıcılarına ve mobil uygulamalara basit uygulama geliştirme arayüzü (API'ler) aracılığıyla gerçek zamanlı iletişim (RTC) sağlayan ücretsiz, açık kaynaklı bir projedir. Direkt olarak eşler arası iletişime izin vermesi ile, eklenti yükleme veya uygulama indirme ihtiyacını ortadan kaldırarak, ses ve video iletişiminin web sayfalarında kolaylıkla kullanılmasını sağlar. Apple, Google, Microsoft, Mozilla ve Opera tarafından desteklenen WebRTC, World Wide Web Konsorsiyumu (W3C) ve İnternet Mühendisliği Görev Gücü (IETF) aracılığıyla standartlaştırılmaktadır.

<span class="mw-page-title-main">Özel tarama</span> Bazı web tarayıcılarında bulunan gizlilik özelliği

Özel tarama veya gizli tarama birçok web tarayıcılarında bulunan bir gizlilik özelliğidir. Böyle bir modda çalışırken, tarayıcı geçici bir oturum oluşturur. Tarayıcının ana oturumundan ve kullanıcı verilerinden izole edilmiştir. Web tarama geçmişi kaydedilmez ve çerezler gibi yerel veriler, oturum kapatıldığında silinir.

Bir belge türü beyanı veya DOCTYPE, belirli bir XML veya SGML belgesini bir belge türü tanımıyla (DTD) ilişkilendiren bir talimattır. 4.0). Belgenin serileştirilmiş biçiminde, belirli bir sözdizimine uyan kısa bir işaretleme dizisi olarak ortaya çıkar.

Tarayıcı güvenliği, ağ bağlantılı verileri ve bilgisayar sistemlerini gizlilik ihlallerinden veya kötü amaçlı yazılımlardan korumak için İnternet güvenliğinin web tarayıcılarına uygulanmasıdır. Tarayıcıların güvenlik açıkları genellikle JavaScript ile bazen Adobe Flash kullanan ikincil bir yüke sahip siteler arası komut dosyası (XSS) kullanır. Güvenlik açıkları ayrıca tüm tarayıcılarda yaygın olarak kullanılan güvenlik açıklarından yararlanabilir.).

Web'de kullanıcı aracısı, kullanıcı adına hareket eden ve "Web içeriğini alan, işleyen ve son kullanıcı etkileşimini kolaylaştıran" herhangi bir yazılımdır. Bu nedenle kullanıcı aracısı özel bir yazılım aracısı türüdür.