İçeriğe atla

Aynı Kök Politikası

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.

Bu mekanizma, kimlik doğrulaması yapılmış kullanıcı oturumlarını yönetmek için yoğun bir şekilde HTTP çerezlerine[1] dayanan modern uygulamalar için özel bir önem taşımaktadır. Bunun nedeni, sunucuların hassas bilgileri göndermek ve durum değiştiren aktiviteleri yapmak için HTTP çerez bilgilerine dayanmasıdır. Birbiri ile bağlantısı olmayan sitelerin sağladığı içerikler arasında betik ayırımı, gizlilik ve bütünlük açısından herhangi bir kayba neden olunmaması için istemci tarafında yapılmalıdır.

Tarihi

Aynı kök politikası kavramı 1995 yılındaki Netscape Navigator 2'ye dayanmaktadır. Bu politika başlarda Belge Nesnesi Modeline (DOM) erişimi korumak için tasarlanmış olsa da, kök JavaScript nesnelerinin hassas kısımlarını koruyacak şekilde genişletilmiştir.[2]

Uygulama

Bütün modern tarayıcılar, güvenlik açısından önemli bir temel taşı olduğu için bir şekilde Aynı Kök Politikası'nı uygulamaktadır.[3] Bu politikalar kesin bir tanıma[4] uymak zorunda değildir, ancak genelde Microsoft Silverlight, Adobe Flash veya Adobe Acrobat gibi diğer web teknolojileri için veya XMLHttpRequest gibi doğrudan DOM değişimi için olmayan diğer mekanizmalar için, kabaca uyarlanabilir güvenlik sınırları tanımlayacak şekilde genişletilmiştir.

Kök belirleme kuralları

bir URI'ye ait "kök" belirlenirken kullanılan algoritma RFC 6454'ün 4. Kısmı'nda tanımlanmaktadır. Tam URI'ler için {protokol, host, port} üçlüsü köktür. Eğer URI bir isimlendirme otoritesi (RFC 3986 3.2. Kısma bakınız) olarak hiyerarşik bir yapı kullanmıyorsa veya URI bir tam URI değilse, genel benzersiz tanımlayıcı (GUID) kullanılır. İki kaynak sadece ve sadece tüm bu değerler birebir aynı ise aynı kökten sayılmaktadır.

Örnek olarak, aşağıdaki tablo "http://www.example.com/dir/page.html" URL'i için yapılan kontrollerin sonuçlarını göstermektedir.

Karşılaştırılan URL Sonuç
Nedeni
http://www.example.com/dir/page2.html Success Aynı protokol, host ve port
http://www.example.com/dir2/other.html Success Aynı protokol, host ve port
http://username:password@www.example.com/dir2/other.html Success Aynı protokol, host ve port
http://www.example.com:81/dir/other.html Failure Aynı protokol ve host, ancak farklı port
https://www.example.com/dir/other.html[]Failure Farklı protokol
http://en.example.com/dir/other.html Failure Farklı host
http://example.com/dir/other.html Failure Farklı host (birebir eşleşmesi gerekmektedir)
http://v2.www.example.com/dir/other.html Failure Farklı host (birebir eşleşmesi gerekmektedir)
http://www.example.com:80/dir/other.html DependsPort açıkça yazılmış. Tarayıcı uygulamasına göre değişir.

Diğer tarayıcıların aksine, Internet Explorer kök belirlemesinde port yerine Security Zone özelliğini kullanmaktadır.[5]

Güvenlik Uygulamaları

Aynı kök politikası, kimlik doğrulaması yapılmış oturumları kullanan sitelerin korunmasına yardım etmektedir. Bahsedilecek örnek, aynı kök politikası olmadığında oluşabilecek olası güvenlik riskini örneklemektedir. Bir kullanıcının bir bankacılık uygulamasını kullandığını ve sonrasında çıkış yapmadığını varsayalım. Sonrasında kullanıcı, bankacılık sitesinden veri isteyen ve arka planda çalışan kötücül JavaScript kodu çalıştıran başka bir siteye gitmiştir. Kullanıcı bankacılık uygulamasında oturumunu kapatmadığı için, kötücül kod kullanıcının bankacılık sitesi üzerinde yapabileceği her şeyi yapabilmektedir. Örneğin, kullanıcının son işlemlerini listeleyebilir, yeni bir işlem yapabilir, vb. Bunun nedeni, tarayıcının bankacılık sitesinin alan adına bağlı olarak bankacılık sitesine oturum çerezlerini gönderebilmesi ve oturum çerezleri alabilmesidir.

Kötücül siteyi ziyaret eden kullanıcı, ziyaret ettiği sitenin bankacılık oturum çerezlerine erişemeyeceğini beklemektedir. JavaScript kodunun doğrudan bankacılık uygulaması çerezlerine erişiminin olmadığı doğru olsa da, yine de bankacılık sitesinin oturum çerezleri ile bankacılık sitesine istek gönderebilmekte ve bu siteden cevap alabilmektedir. Betik temelde kullanıcının yapabileceği her şeyi yapabildiği için, bankacılık sitesi tarafından uygulanan CSRF koruma yöntemleri bile faydasız olmaktadır.

Aynı kök politikasının esnetilmesi

Bazı durumlarda aynı kaynak politikası, birden fazla alt alan adı kullanan büyük web siteleri için  çok kısıtlayıcı olarak problem oluşturabilmektedir. Aşağıda bu politikayı esnetmek için kullanılan bazı teknikler verilmiştir:

document.domain özelliği

Eğer iki pencere (veya çerçeve) alan adını aynı değer olarak belirleyen betikler içeriyorsa, bu iki pencere için aynı kök politikası esnetilir ve pencereler birbirleriyle haberleşebilir. Örneğin, orders.example.com ve catalog.example.com üzerinden yüklenen dokümanlardaki betikler, document.domain özelliklerini "example.com" olarak belirleyebilir ve böylece dokümanların aynı kökü paylaşmasını ve her bir dokümanın diğerinin özelliklerini okuyabilmesini sağlayabilirler. Bu, iç tarafta saklanan port değerinin null olarak işaretlenebilmesinden dolayı her zaman çalışmayabilmektedir. Başka bir deyişle, example.com port 80, document.domain özelliği güncellendiği için example.com port null olarak değişebilmektedir. Port null 80 portu gibi muamele görmeyebilir (tarayıcıya bağlı olarak) ve böylece geçersiz olabilir veya tarayıcıya bağlı olarak başarılı olabilir.[6]

Kökler Arası Kaynak Paylaşımı

Aynı kök politikasının esnetilmesi için ikinci bir yöntem, Köklar Arası Kaynak Paylaşımı ismi ile standardize edilmiştir. Bu standart, HTTP protokolünü yeni Origin istek başlığı ve Access-Control-Allow-Origin cevap başlığı ile genişletmiştir.[7] Bu, sunucuların bir başlık kullanarak bir dosyaya erişebilecek kökleri listelemesine veya özel bir karakter (*) kullanarak bir dosyayı herhangi bir sitenin erişimine açmasına izin vermektedir. Firefox 3.5, Safari 4 ve Internet Explorer 10 gibi tarayıcılar, aksi takdirde aynı kök politikası tarafından engellenecek olan XMLHttpRequest ile kökler arası HTTP isteklerine izin vermek için bu başlığı kullanmaktadır.

Dokümanlar arası mesajlaşma

Başka bir teknik olan dokümanlar arası mesajlaşma, bir sayfadaki betiğin betik köklerinden bağımsız olarak başka bir sayfadaki betiğe metinsel mesajlar göndermesine izin vermektedir. Bir Window nesnesi üzerinden postMessage() metodunun çağrılması, eşzamansız olarak o window nesnesi üzerinde bir "onmessage" olayı oluşturur ve kullanıcının tanımladığı olay işleyicileri tetikler. Bir sayfadaki betik, başka bir sayfadaki metot ve değişkenlere doğrudan erişemez, ancak bu mesaj gönderme mekanizması üzerinden güvenli bir şekilde haberleşebilirler.

JSONP

JSONP bir sayfanın, başka bir alan adından bir JSON cevabı yükleyen sayfaya <script> elemanının eklenmesi ile farklı bir alan adından JSON verisi almasına izin vermektedir.

WebSockets

Modern tarayıcılar, aynı kök politikasını uygulamaksızın bir betiğin bir WebSocket adresine bağlanmasına izin vermektedir. Ancak, bir WebSocket URI'sinin kullanıldığını anlamakta ve isteğe, bağlantıyı isteyen betiğin kökünü belirten bir Origin: başlığı eklemektedir. Siteler arası güvenliği sağlamak için, WebSocket sunucusu başlık verisini cevap almasına izin verilen köklerden oluşan bir beyaz liste ile karşılaştırmalıdır.

Uç örnekler ve istisnalar

Aynı kök politikası kontrollerinin ve ilgili mekanizmaların davranışı, URL'leri (file:, data:, vb.) ile ilişkilendirilen açıkça tanımlanmış bir alan adı veya port bilgisine sahip olmayan sözde protokoller için olduğu gibi bazı uç örneklerde kesin bir şekilde tanımlanmamıştır. Bu durum, lokal olarak saklanan HTML dosyasının disk üzerindeki diğer dosyalara erişebilmesi veya İnternet üzerindeki herhangi bir site ile haberleşebilmesi gibi genellikle istenmeyen yetenekler gibi hatırı sayılır miktarda güvenlik problemlerine neden olmuştur.

İlave olarak, JavaScript'ten önce var olan pek çok siteler arası işlemler aynı kök kontrollerine tabii olmamaktadır; buna bir örnek alan adları arasında betiklerin dahil edilebilmesi veya POST formlarının gönderilebilmesi yeteneğidir.

Son olarak, DNS re binding saldırıları veya sunucu taraflı vekil sunucular gibi bazı saldırı türleri, alan adı kontrolünün kısmen atlatılabilmesine izin vermekte ve sahte web sayfalarının, "gerçek", canonical kökünden farklı başka adresler üzerinden doğrudan sitelerle etkileşimde bulunabilmesini mümkün kılmaktadır. Bu tür saldırıların etkisi, çok özel durumlarla sınırlıdır. Çünkü tarayıcı hala saldırganın sitesiyle haberleştiğine inanmaktadır ve bu yüzden üçüncü taraf çerezleri veya diğer hassas bilgileri saldırgana ifşa etmemektedir.

Geçici çözümler

Geliştiricilerin kontrollü bir şekilde aynı kök politikasını atlatabilmesini mümkün kılmak için, fragman tanımlayıcının veya window.name özelliğinin kullanılması gibi bir takım yöntemler, farklı alan adlarında bulunan dokümanlar arasında veri gönderiminde kullanılmaktadır. HTML5 standardıyla, yeni tarayıcılarda kullanılabilir olan bir yöntem postMessage arayüzü, resmîleştirilmiştir. JSONP de diğer alan adlarına yapılan Ajax benzeri çağrıları aktif hale getirmek için kullanılabilmektedir.[8]

Ayrıca bakınız

Kaynakça

  1. ^ IETF [rfc:6265 HTTP State Management Mechanism, Apr, 2011]
  2. ^ "The Tangled Web". Network Security. 2012 (4). doi:10.1016/s1353-4858(12)70022-3. 
  3. ^ "Browser Security Handbook, part 2". google.com. 19 Ağustos 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 31 Ocak 2014. 
  4. ^ "Same Origin Policy". W3C. 27 Ocak 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 31 Ocak 2014. 
  5. ^ Lawrence, Eric. "IEInternals - Same Origin Policy Part 1". 10 Şubat 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Ekim 2013. 
  6. ^ LePera, Scott. "Cross-domain security woes". The Strange Zen Of JavaScript. 30 Ekim 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2014. 
  7. ^ "Creating WSGI Middleware". 4 Mayıs 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Nisan 2017. 
  8. ^ "Blog Post: Using CORS with all (modern) browsers". 13 Ocak 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Nisan 2017. 

Dış bağlantılar

  • Aynı kök politikalarının farklı özelliklerinin detaylı bir kıyaslaması
  • Satıcıların sağladığı örnek aynı kök politikası tanımları
  • HTML5'in kök tanımı
  • Aynı kök politikası ile ilgili W3C makalesi
  • Web Kök kavramına dair RFC 6454
  • Blog yazısı: Çerez Aynı Kök Politikası

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Web tarayıcısı</span> World Wide Webdeki bilgi kaynaklarını almak, sunmak ve dolaşmak için yazılım uygulaması

Web tarayıcısı veya ağ tarayıcısı, kullanıcıların World Wide Web (WWW) üzerinde bulunan bilgi kaynaklarını edinmeye ve görüntülemeye yarayan yazılımların genel adıdır. WWW üzerindeki bilgi kaynakları web sayfası, resim, video veya başka içerik türü olabilir. Bu kaynaklarda yer alan hiperlinkler aracılığıyla kullanıcılar, web tarayıcılarını kullanarak ilgili kaynaklar arasında dolaşabilir.

<span class="mw-page-title-main">JavaScript</span> programlama dili

JavaScript, HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir. Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. Tüm büyük web tarayıcılarında, kaynak kodunu kullanıcıların cihazlarında yürütebilmek için özel bir JavaScript motoru bulunur.

HTTPS bir bilgisayar ağı üzerinden güvenli iletişim için internet üzerinde yaygın olarak kullanılan bir HTTP uzantısıdır. HTTPS'te, iletişim protokolü Taşıma Katmanı Güvenliği (TLS) veya öncesinde, onun öncülü/selefi olan Güvenli Soket Katmanı (SSL) ile şifrelenir. Bu nedenle protokol sık sık TLS üzerinden HTTP veya SSL üzerinden HTTP olarak da adlandırılır.

<span class="mw-page-title-main">Web sayfası</span> World Wide Web ve web tarayıcıları aracılığıyla doğrudan görüntülenebilen tek belge

Web sayfası, World Wide Web için hazırlanan ve web tarayıcısı kullanılarak görüntülenebilen dokümanlardır. Web sayfaları çoğunlukla HTML formatında kodlanır, CSS, betik, görsel ve diğer yardımcı kaynaklardan yararlanılarak son görünümüne sahip olur ve işlevsellik kazanır. Birden fazla web sayfasının bir araya gelmesi ile ortaya çıkan web sitesi ile karıştırılmamalıdır. Günlük konuşma dilinde internet sayfası terimi de çoğunlukla web sitesi anlamında kullanılmaktadır.

Web grafik tasarımı, grafik tasarım alanı ile yakın ilişkili bir konu olmakla birlikte kendi içinde ayrı bir dal olarak da geniş bir alanı kapsayan bir kavramdır.

URL, İnternet'te bir kaynağa rastgelen, standart bir formata uygun bir karakter tertibidir.

AJAX, İnternet sayfalarında JavaScript ve XMLHttpRequest kullanımı ile etkileşimli uygulamalar yaratan tekniğin adıdır.

AdSense, her aşamadaki İnternet sitesi yayıncılarının, site içeriğiyle ilgili reklamları sitelerinde göstererek para kazanmalarını sağlayan bir Google ürünüdür. Reklamlar, ziyaretçilerin sitede aradıkları konulara ve ilgi alanlarına uygun olduğu için hem sayfaları zenginleştirir hem de siteden para kazanma olanağı sağlar.

<span class="mw-page-title-main">Document Object Model</span>

Document Object Model, "DOM", "Belge Nesnesi Modeli" anlamlarına da gelmektedir. İnternet tarayıcıları girilen internet sitesini bir belge, bu belge (sayfa) içerisinde bulunan tüm elemanları da nesne olarak kabul eder. Buna göre resim, yazı, form gibi tüm elemanlar nesnedir. İşte DOM sayfa içindeki herhangi bir nesnenin özelliğine müdahale edebilmemize, nesne özelliklerini değiştirebilmemize olanak sağlar. Bunu yapabilmek için de JavaScript gibi bazı script dilleri kullanmamız gerekir.

Bu liste bilinen bazı Firefox eklentilerinin listesidir. Birçok Mozilla Firefox eklentisi SeaMonkey tarayıcısında da çalışır. Daha geniş bir liste için resmi eklenti deposuna bakabilirsiniz. 30 Nisan 2007 tarihiyle bu depoda 2286 eklenti bulunmaktadır. Eklentiler geliştiriciler tarafından yaratılmaktadır. Eklentilerin tamamı kamuya açıklanmadan önce editör bir grup tarafından gözden geçirilir.

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

WebKit, web tarayıcılarına web sayfalarını işlemesine izin vermek için tasarlanmış bir web tarayıcı motorudur. Webkit motoru penceredeki web içeriğini görüntülemek için bir sınıflar kümesi sağlar ve aşağıdaki bağlantılar gibi kullanıcı tarafından tıklandığı zaman tarayıcı özellikleri gerçekleştirir.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

<span class="mw-page-title-main">GNU LibreJS</span> Mozilla Firefox tabanlı tarayıcılar için özgür yazılım web tarayıcısı eklentisi

GNU LibreJS ya da kısaca LibreJS Mozilla Firefox tabanlı tarayıcılar için özgür yazılım web tarayıcısı eklentisidir. GNU Tasarısı tarafından oluşturulmuştur. Amacı kullanıcının web tarayıcısında özgür olmayan anlaşılması zor JavaScript programlarını engellemek ve özgür ya da anlaşılabilen programlara izin vermektir. Eklenti Richard Stallman'ın "JavaScript Tuzağı" olarak adlandırdığı sorunu gidermek için oluşturulmuştur, bu sorun birçok kullanıcının web tarayıcılarında bilmeden özel mülk yazılım çalıştırması hakkındadır.

İleri web uygulaması, yeni bir yazılım geliştirme metodolojisini ifade etmek için kullanılır. Geleneksel uygulamalar dışında, İleri Web Uygulaması bilinen web sitelerinin ve mobil uygulamaların hibrit halde geliştirilmesi olarak değerlendirilebilir. Bu yeni uygulama yaşam-döngüsü çeşitli özellikleri bir araya getirir ve en modern tarayıcılar tarafından desteklenerek mobil tecrübenin faydalarını kullanıcılara sunabilmektedir.

Cross-Origin Resource Sharing (CORS), bir web sayfası üzerindeki bazı kaynakların, 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. Ancak, bazı “alanlar arası” istekler, özellikle Ajax istekleri, Aynı Kök Politikası nedeniyle varsayılan olarak yasaklanmıştır.

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.

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

Nokia Browser Nokia tarafından geliştirilen ve Symbian S60 cep telefonu platformu için varsayılan web tarayıcısıdır. Tarayıcı, Apple'in açık kaynaklı WebCore ve JavaScriptCore çerçevelerinin bir bağlantı noktasına dayalıdır. Bu, Apple'ın Safari Web tarayıcısında kullandığı WebKit oluşturma motorunu oluşturur. Seri 40 sisteminde kullanılan Nokia Xpress tarayıcısının yerini aldı.

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.

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.).