Chrome, document.domain alanının değiştirilmesini devre dışı bıraktı

Web siteniz document.domain'in ayarlanmasına bağlıysa işlem yapmanız gerekir.

Maud Nalpas
Maud Nalpas
Eiji Kitamura
Eiji Kitamura

Neler değişiyor ve neden değişiyor?

Chrome 115'ten itibaren web siteleri document.domain özelliğini ayarlayamayacaktır: Chrome document.domain alanını sabit hale getirecektir. Kaynaklar arası iletişim kurmak için postMessage() veya ChannelMessaging API gibi alternatif yaklaşımlar kullanmanız gerekir.

Bu değişikliğin kademeli olarak uygulanacağını unutmayın.

Diğer tarayıcıların da bu işlevi kullanımdan kaldırması ve ileride bu işlevi kaldırması beklenmektedir. Ayrıntılar için tarayıcı uyumluluğu bölümünü inceleyin.

document.domain neden sabit olmalı?

document.domain, kaynağın ana makine adını alacak veya ayarlayacak şekilde tasarlanmıştır. Birçok web sitesi document.domain özelliğini aynı site ancak çapraz kaynak sayfalar arasında iletişime izin verecek şekilde ayarlar.

Bu kullanışlı bir teknik olsa da aynı kaynak politikasını gevşettiği için güvenlik riski oluşturur. document.domain ile ilgili güvenlik endişeleri nedeniyle spesifikasyonda, kullanıcıları bu uygulamayı kullanmamaları konusunda uyaran bir değişiklik yapılmıştır.

Ayrıntılı bilgi: document.domain neden sabit olmalı?

document.domain bugün nasıl kullanılıyor?

Birçok web sitesi document.domain özelliğini aynı site ancak çapraz kaynak sayfalar arasında iletişime izin verecek şekilde ayarlar.

Aynı site ancak kaynaklar arası siteler aynı eTLD+1'e ancak farklı alt alan adlarına sahiptir.

document.domain hizmetinin şimdiye kadar nasıl kullanıldığı aşağıda açıklanmıştır:

https://parent.example.com alanındaki bir sayfanın, https://video.example.com web sitesindeki bir iFrame sayfasını yerleştirdiğini varsayalım. Bu sayfalar farklı alt alan adlarıyla aynı eTLD+1'e (example.com) sahiptir. Her iki sayfanın da document.domain değeri 'example.com' olarak ayarlandığında, tarayıcı iki kaynağı da aynı kaynak gibi değerlendirir.

https://parent.example.com için document.domain değerini ayarlayın:

// Confirm the current origin of "parent.example.com"
console.log(document.domain);

// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);

https://video.example.com için document.domain değerini ayarlayın:

// Confirm the current origin of "video.example.com"
console.log(document.domain);

// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);

Artık https://parent.example.com üzerinde https://video.example.com öğesine karşı kaynaklar arası DOM manipülasyonu oluşturabilirsiniz.

Web siteleri, aynı sitedeki belgelerin daha kolay iletişim kurmasını sağlamak için document.domain özelliğini ayarlar. Bu değişiklik aynı kaynak politikasını gevşetdiğinden, üst sayfa iframe'in dokümanına erişip DOM ağacına geçiş yapabilir (ve bunun tersi de geçerlidir).

Bu, kullanışlı bir teknik olmakla birlikte, güvenlik riski de beraberinde getirir.

document.domain ile ilgili güvenlik sorunları

document.domain ile ilgili güvenlik endişeleri nedeniyle spesifikasyonda, kullanıcıları bu özelliği kullanmamaları konusunda uyaran bir değişiklik yapılmıştır.

Örneğin, iki sayfa document.domain olarak ayarlandığında aynı kaynak gibi davranabilirler. Bu durum, özellikle bu sayfalar farklı alt alan adlarına sahip paylaşılan bir barındırma hizmeti kullandığında büyük önem taşır. document.domain hizmetini ayarlamak, aynı hizmet tarafından barındırılan diğer tüm sitelere erişim sağlar. Bu da saldırganların sitelerinize erişmesini kolaylaştırır. document.domain, alan adının bağlantı noktası numarası bölümünü yoksaydığı için bu mümkündür.

document.domain ayarının güvenlik açısından sonuçları hakkında daha fazla bilgi edinmek için MDN'deki "Document.domain" sayfasını okuyun.

Tarayıcı uyumluluğu

Sitemin etkilenip etkilenmediğini nasıl anlarım?

Web siteniz bu değişiklikten etkilenirse Chrome, Geliştirici Araçları'ndaki Sorunlar panelinde sizi uyarır. Bu uyarı 2022'de eklenmiştir. Geliştirici Araçları'nın sağ üst tarafındaki sarı bayrağa dikkat edin.

Geliştirici Araçları'ndaki sorun uyarısının ekran görüntüsü

Chrome'dan kaldırılması planlanan tüm API'leri bulmak için sitenizi LightHouse'un kullanımdan kaldırılan API denetimi aracılığıyla da çalıştırabilirsiniz.

Reporting API'yi kurduysanız Chrome, yakında gerçekleşecek bu kullanımdan kaldırma konusunda bilgi vermek için size desteği sonlandırma raporları gönderdi. Mevcut rapor toplama hizmetleriyle veya kendi şirket içi çözümünüzü oluşturarak Reporting API'yi kullanma hakkında daha fazla bilgi edinin.

Bu değişikliğin etkili olduğunu nasıl görebilirim?

Bu değişiklik Chrome 115'ten itibaren kademeli olarak kullanıma sunulacaktır. Chrome tarayıcınızda henüz kullanıma sunulmamış olsa bile bu değişikliğin işleyiş şeklini görmek için aşağıdaki şekilde etkinleştirebilirsiniz:

  1. chrome://flags/#origin-agent-cluster-default oyununu aç
  2. Etkinleştir'i seçin.
  3. Chrome'u yeniden başlatın.

Hangi alternatifleri kullanabilirim?

En iyi seçenek, document.domain öğesini hiç değiştirmemektir (örneğin, sayfayı ve tüm bileşen çerçevelerini aynı kaynakta barındırarak). Bu, tüm tarayıcıların tüm sürümlerinde çalışır. Ancak bu işlem için bir uygulamanın önemli ölçüde yeniden çalışması gerekebilir. Bu nedenle, kaynaklar arası erişimi desteklemeye devam eden alternatiflere de bakmak yararlı olacaktır.

document.domain yerine postMessage() veya Channel Messaging API'yi kullanın

Çoğu kullanım durumunda, document.domain yerine çapraz kaynak postMessage() veya Channel Messaging API kullanılabilir.

Aşağıdaki örnekte:

  1. https://parent.example.com, postMessage() aracılığıyla bir mesaj göndererek DOM'yi değiştirmek için bir iframe içinde https://video.example.com isteğinde bulunur.
  2. https://video.example.com, mesajı alır almaz DOM'u değiştirir ve başarılı olanı üst yöneticiye bildirir.
  3. https://parent.example.com başarı için teşekkür ediyor.

https://parent.example.com tarihinde:

// Send a message to https://video.example.com
iframe.postMessage('Request DOM manipulation', 'https://video.example.com');

// Receive messages
iframe.addEventListener('message', (event) => {
  // Reject all messages except ones from https://video.example.com
  if (event.origin !== 'https://video.example.com') return;

  // Filter success messages
  if (event.data === 'succeeded') {
    // DOM manipulation is succeeded
  }
});

https://video.example.com tarihinde:

// Receive messages
window.addEventListener('message', (event) => {
  // Reject all messages except ones from https://parent.example.com
  if (event.origin !== 'https://parent.example.com') return;

  // Do a DOM manipulation on https://video.example.com.

  // Send a success message to https://parent.example.com
  event.source.postMessage('succeeded', event.origin);
});

Deneyin ve nasıl çalıştığını görün. postMessage() veya Channel Messaging API ile çalışmayan belirli gereksinimleriniz varsa @ChromiumDev üzerinden Twitter üzerinden bize bildirin veya Stack Overflow'da document.domain etiketiyle sorun.

Son çare olarak Origin-Agent-Cluster: ?0 başlığını gönderin

document.domain ayarlamasına devam etmek için geçerli nedenleriniz varsa hedef belgeyle birlikte Origin-Agent-Cluster: ?0 yanıt başlığı gönderebilirsiniz.

Origin-Agent-Cluster: ?0

Origin-Agent-Cluster başlığı, tarayıcıya, dokümanın kaynak içeren veya kaynaklarla ilişkili aracı kümesi tarafından işlenip işlenmeyeceğini bildirir. Origin-Agent-Cluster hakkında daha fazla bilgi edinmek için Origin-Agent-Cluster başlığıyla performans yalıtımı isteme bölümünü okuyun.

Bu üst bilgiyi gönderdiğinizde dokümanınız, varsayılan olarak sabit hale geldikten sonra bile document.domain ayarını ayarlamaya devam edebilir.

Bu davranışı gerektiren diğer tüm belgelerin de bir Origin-Agent-Cluster göndermesi gerekir (yalnızca tek bir belge tarafından ayarlanmışsa document.domain etkili olmaz).

Kurumsal politika için OriginAgentClusterDefaultEnabled yapılandırın

İsteğe bağlı olarak yöneticiniz, OriginAgentClusterDefaultEnabled politikasını false olarak yapılandırabilir ve document.domain politikasını kuruluşunuz genelindeki Chrome örneklerinde varsayılan olarak ayarlanabilir. Daha fazla bilgi edinmek için Chrome Enterprise Politika Listesi ve Yönetimi | Dokümanlar başlıklı makaleyi inceleyin.

Kaynaklar

Teşekkür

Fotoğraf: Finan Akbar'ın Unsplash