Web siteniz document.domain
ayarlamasına bağlıysa işlem yapmanız gerekir.
Güncellemeler
- 30 Mayıs 2023:
document.domain
setter öğesinin kullanımdan kaldırılmasının Chrome 115'te geçerli olacağını duyurmuştuk. - 7 Nisan 2023: Chrome 112'de bu değişikliği göndermeden önce bir sorun tespit ettik. Varsayılan olarak kaldırılacak
document.domain
hazırlayıcı ş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 ile bu ileti dizisine abone olun. - 20 Ocak 2023: Güncellenen zaman çizelgesi: Chrome 112'den itibaren
document.domain
setter varsayılan olarak kaldırılacak. Ayrıca,document.domain
davranışını kontrol etmek için kurumsal politikadan bahsedildi. - 25 Temmuz 2022: Güncellenen zaman çizelgesi: Chrome 109 sürümünden itibaren
document.domain
setter varsayılan olarak kaldırılacak. - 4 Şubat 2022: Yeni zaman çizelgesiyle güncellendi. Chrome 100'den itibaren Sorunlar panelinde bir uyarı gösterilecek. Chrome 106'dan itibaren varsayılan olarak
document.domain
ayarlayıcı kaldırılacak.
document.domain
,
kaynağın ana makine adını alacak veya ayarlayacak şekilde tasarlanmıştır.
Chrome'da, web siteleri document.domain
özelliğini ayarlayamaz. Kaynaklar arası iletişim kurmak için postMessage()
veya Channel Messaging API gibi alternatif yaklaşımlar kullanmanız gerekecektir. Chrome 112'nin bu değişikliği en kısa sürede göndermesini hedefliyoruz. Ancak bu, Gönderim Amacı'na verilen yanıta bağlıdır.
Web siteniz doğru şekilde çalışmak için document.domain
aracılığıyla aynı kaynak politikası gevşetilmesini kullanıyorsa sitenin bu davranışı gerektiren diğer tüm dokümanlar gibi bir Origin-Agent-Cluster: ?0
üst bilgisi göndermesi
gerekir (yalnızca tek bir belge
ayarlarsa document.domain
etkili olmaz).
document.domain
neden sabit olmalı?
Birçok web sitesi document.domain
özelliğini aynı site ancak çapraz kaynak sayfalar arasında iletişime izin verecek şekilde ayarlar.
Bu özelliğin 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.
Diğer tarayıcı tedarikçileriyle olan mevcut tartışma da aynı yönde ilerliyor.
Ö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.
Chrome, document.domain
sürümünü Chrome 112'de sabit hale getirmeyi planlamaktadır.
Sitemin etkilenip etkilenmediğini nasıl anlarım?
Web siteniz bu değişiklikten etkilenirse Chrome, Geliştirici Araçları'ndaki Sorunlar panelinde uyarı gönderir. Sağ üst köşedeki sarı bayrağa dikkat edin.
Raporlama uç noktası ayarladıysanız kullanımdan kaldırma raporları da gönderilir. 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.
Chrome'dan kaldırılması planlanan tüm API'leri bulmak için sitenizi LightHouse'un desteği sonlandırılmış API denetimi bölümünden çalıştırabilirsiniz.
Kökler arası alternatif iletişim
Şu anda web siteniz için document.domain
yerine üç farklı seçenek sunuluyor.
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:
https://parent.example.com
,postMessage()
aracılığıyla bir mesaj göndererek DOM'yi değiştirmek için bir iframe içindehttps://video.example.com
isteğinde bulunur.https://video.example.com
, mesajı alır almaz DOM'u değiştirir ve başarılı olanı üst yöneticiye bildirir.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.
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.
Tarayıcı uyumluluğu
- Kaynak spesifikasyonunda, özelliğin kaldırılması gerektiği belirtilir.
- Mozilla, prototip oluşturmada varsayılan olarak
document.domain
değerini devre dışı bırakmayı düşünmektedir. - WebKit,
document.domain
setter uygulamasının kullanımdan kaldırılması konusunda kısmen olumlu olduklarını belirtti.
Kaynaklar
Document.domain
- Web API'leri | MDN- Kaynak İzolasyonu ve Kullanımdan Kaldırılması
document.domain
document.domain
kullanımdan kaldırılıyor. · Sorun No. 564 · w3ctag/design-reviews
Teşekkür
Fotoğraf: Braydon Anderson tarafından Unsplash'te