Chrome, aynı kaynak politikasını gevşetmek için document.domain alanının değiştirilmesini devre dışı bırakacak

Web siteniz document.domain ayarını kullanıyorsa işlem yapmanız gerekir.

Güncellemeler

  • 30 Mayıs 2023: document.domain ayarlayıcısının desteğinin Chrome 115'te sonlandırılacağını duyurmuştuk.
  • 7 Nisan 2023: Chrome 112'de bu değişikliği kullanıma sunmadan önce bir sorun tespit ettik. Varsayılan olarak kaldırılacak document.domain ayarlayıcısı şu anda askıya alınmış durumda ve yeni gönderim aşaması henüz belirlenmedi. Lütfen bu blog yayınını tekrar kontrol edin veya blink-dev'e ve bu ileti dizisine abone olun.
  • 20 Ocak 2023: Güncellenen zaman çizelgesi: document.domain ayarlayıcı, Chrome 112'den itibaren varsayılan olarak kaldırılacak. Ayrıca, document.domain davranışını kontrol etmek için kurumsal politikadan bahsedilir.
  • 25 Temmuz 2022: Güncellenen zaman çizelgesi: document.domain ayarlayıcı, Chrome 109'dan itibaren varsayılan olarak kaldırılacak.
  • 4 Şubat 2022: Yeni zaman çizelgesi ile güncellendi. Chrome 100'den itibaren Sorunlar panelinde bir uyarı göstereceğiz ve Chrome 106'dan itibaren document.domain ayarlayıcısını varsayılan olarak kaldıracağız.
atlayın.

document.domain, kaynağın ana makine adını almak veya ayarlamak için tasarlanmıştır.

Chrome'da web siteleri document.domain ayarlayamaz. Kaynaklar arası iletişim kurmak için postMessage() veya Kanal Mesajlaşma API'si gibi alternatif yaklaşımlar kullanmanız gerekir. Bu değişikliği en erken Chrome 112'de kullanıma sunmayı hedefliyoruz ancak bu, Yayınlama Niyeti'ne verilen yanıta bağlıdır.

Web sitenizin düzgün çalışması için document.domain aracılığıyla aynı kaynak politikasının gevşetilmesi gerekiyorsa sitenin, bu davranışı gerektiren diğer tüm dokümanlar gibi bir Origin-Agent-Cluster: ?0 başlığı göndermesi gerekir (document.domain yalnızca bir doküman tarafından ayarlanırsa hiçbir etkisi olmadığını unutmayın).

document.domain neden değiştirilemez hale getirilir?

Birçok web sitesi, document.domain değerini aynı sitedeki ancak farklı kaynaklı sayfalar arasında iletişime izin verecek şekilde ayarlar.

Bu özelliğin kullanımı:

https://parent.example.com'teki bir sayfanın https://video.example.com'ten bir iFrame sayfası yerleştirdiğini varsayalım. Bu sayfalar, farklı alt alan adlarına sahip aynı eTLD+1'e (example.com) sahiptir. Her iki sayfanın document.domain özelliği 'example.com' olarak ayarlandığında tarayıcı, iki kaynağı aynı kaynakmış gibi işler.

https://parent.example.com için document.domain'ü 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'ü 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'a karşı kaynakta değişiklik içeren DOM işlemleri oluşturabilirsiniz.

Web siteleri, aynı sitedeki dokümanların daha kolay iletişim kurabilmesi için document.domain değerini ayarlar. Bu değişiklik aynı kaynak politikasını esnettiğinden üst sayfa, iframe'in dokümanına erişebilir ve DOM ağacını tarayabilir. Bunun tersi de geçerlidir.

Bu kullanışlı bir teknik olsa da güvenlik riski oluşturur.

document.domain ile ilgili güvenlik endişeleri

document.domain ile ilgili güvenlik endişeleri, özellikte kullanıcıları bu özelliği kullanmaktan kaçınmaları konusunda uyaran bir değişiklik yapılmasına neden oldu. Diğer tarayıcı tedarikçileriyle devam eden görüşmeler de aynı yönde ilerliyor.

Örneğin, iki sayfa document.domain değerini ayarlarken aynı kaynaktan geliyormuş gibi davranabilir. Bu, özellikle bu sayfalar farklı alt alan adlarına sahip paylaşılan bir barındırma hizmeti kullanıyorsa önemlidir. document.domain ayarı, 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. Bu, document.domain'ün alanın bağlantı noktası numarası bölümünü yoksadığı için 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.

Chrome, document.domain değerini Chrome 112'de sabitlemeyi planlamaktadır.

Sitemin etkilenip etkilenmediğini nasıl anlayabilirim?

Web siteniz bu değişiklikten etkilenirse Chrome, DevTools Sorunlar panelinde uyarı verir. Sağ üst köşedeki sarı bayrağa dikkat edin.

document.domain değiştirildiğinde Sorunlar panelinde bir uyarı gösterilir.
document.domain değiştirildiğinde Sorunlar panelinde bir uyarı gösterilir.

Raporlama uç noktası oluşturduysanız kullanımdan kaldırma raporları da gönderilir. Mevcut rapor toplama hizmetleri ile veya kendi şirket içi çözümünüzü oluşturarak Reporting API'yi kullanma hakkında daha fazla bilgi edinin.

Chrome'dan kaldırılması planlanan tüm API'leri bulmak için sitenizi Lighthouse'un desteği sonlandırılan API denetiminden geçirebilirsiniz.

Alternatif kaynakta iletişim

Şu anda web sitenizde document.domain'yi değiştirmek için üç seçeneğiniz var.

postMessage() veya Channel Messaging API'yi kullanma

Çoğu kullanım alanında, kaynak ötesi postMessage() veya Channel Messaging API, document.domain'in yerini alabilir.

Aşağıdaki örnekte:

  1. https://parent.example.com, postMessage() üzerinden bir mesaj göndererek DOM'u değiştirmek için bir iframe içinde https://video.example.com'yi ister.
  2. https://video.example.com, mesajı alır almaz DOM'u değiştirir ve başarıyı üst öğeye bildirir.
  3. https://parent.example.com, başarıyı onaylar.

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ı öğrenin. postMessage() veya Channel Messaging API ile çalışmayacak belirli gereksinimleriniz varsa Twitter'daki @ChromiumDev üzerinden bize bildirin veya Stack Overflow'da document.domain etiketiyle sorunlarınızı sorun.

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

document.domain ayarını kullanmaya devam etmek için geçerli nedenleriniz varsa hedef dokümanla birlikte Origin-Agent-Cluster: ?0 yanıt üstbilgisini 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 izolasyonu isteme başlıklı makaleyi okuyun.

Bu başlığı gönderdiğinizde, belgeniz varsayılan olarak değiştirilemez hale geldikten sonra bile document.domain değerini ayarlamaya devam edebilir.

Kurumsal politika için OriginAgentClusterDefaultEnabled'ü yapılandırma

Yöneticiniz, isteğe bağlı olarak OriginAgentClusterDefaultEnabled politikasını false olarak yapılandırarak document.domain'yi kuruluşunuzdaki Chrome örneklerinde varsayılan olarak ayarlanabilir hale getirebilir. Daha fazla bilgi için Chrome Enterprise Politika Listesi ve Yönetimi | Dokümanlar başlıklı makaleyi okuyun.

Tarayıcı uyumluluğu

Kaynaklar

Teşekkür ederiz

Fotoğraf: Braydon Anderson, Unsplash