Web sitenizde document.domain
politikasının ayarlanması gerekiyorsa 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 çizelgesiyle 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.
document.domain
, kaynağın ana makine adını almak veya ayarlamak için tasarlanmıştır.
Web siteleri Chrome'da document.domain
iznini 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 sabit olmalıdır?
Birçok web sitesi, document.domain
değerini aynı sitedeki ancak farklı kaynaklı sayfalar arasında iletişime izin verecek şekilde ayarlar.
Nasıl kullanıldığı aşağıda açıklanmıştır:
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 da document.domain
değeri 'example.com'
olarak ayarlandığında tarayıcı iki kaynağı aynı kaynakmış 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
'ü 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ında rahatlık sağladığından, üst sayfa iframe'in dokümanına erişip DOM ağacını gezinebilir (veya 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, kullanıcıları kullanmaktan kaçınmaları konusunda uyaran spesifikasyonda değişikliğe yol açmıştır.
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
politikasını ayarlamak, aynı hizmet tarafından barındırılan tüm diğer sitelere erişimi açarak 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 anlarım?
Web siteniz bu değişiklikten etkilenirse Chrome, DevTools Sorunlar panelinde uyarı verir. Sağ üst köşedeki sarı bayrağa dikkat edin.
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 kaynaklar arası iletişim
Şu anda web sitenizde document.domain
'yi değiştirmek için üç seçeneğiniz var.
postMessage()
veya Channel Messaging API'yi kullanın
Çoğu kullanım durumunda, kaynaklar arası postMessage()
veya Channel Messaging API document.domain
yerini alabilir.
Aşağıdaki örnekte:
https://parent.example.com
,postMessage()
üzerinden bir mesaj göndererek DOM'u değiştirmek için bir iframe içindehttps://video.example.com
'yi ister.https://video.example.com
, mesajı alır almaz DOM'u değiştirir ve başarıyı üst öğeye bildirir.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ı görün. postMessage()
veya Channel Messaging API ile çalışmayacak belirli gereksinimleriniz varsa Twitter'da @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ı yapmaya devam etmek için geçerli nedenleriniz varsa hedef dokümanla birlikte Origin-Agent-Cluster: ?0
yanıt başlığını 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.
OriginAgentClusterDefaultEnabled
politikasını kurumsal politika için yapılandırın
İsteğe bağlı olarak yöneticiniz, kuruluşunuzdaki Chrome örneklerinde document.domain
politikasını varsayılan olarak ayarlanabilir hale getirmek için OriginAgentClusterDefaultEnabled
politikasını false
olarak yapılandırabilir. Daha fazla bilgi edinmek için Chrome Enterprise Politika Listesi ve Yönetimi | Dokümanlar başlıklı makaleyi inceleyin.
Tarayıcı uyumluluğu
- Kaynak spesifikasyonu, özelliğin kaldırılması gerektiğini belirtir.
- Mozilla,
document.domain
'ı varsayılan olarak devre dışı bırakmayı prototip oluşturmaya değer bir seçenek olarak değerlendirir. - WebKit,
document.domain
ayarlayıcısının desteğinin sonlandırılmasıyla ilgili olarak orta düzeyde olumlu bir tutum sergilediğini belirtti.
Kaynaklar
Document.domain
- Web API'leri | MDN- Kaynak İzolasyon ve Desteği Sonlandırılan
document.domain
document.domain
desteği sonlandırılıyor. · Issue #564 · w3ctag/design-reviews
Teşekkür ederiz
Braydon Anderson'ın Unsplash'taki fotoğrafı