Web siteniz document.domain'in ayarlanmasına bağlıysa işlem yapmanız gerekir.
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
- HTML spesifikasyonunda, özelliğin kaldırılması gerektiği belirtilmektedir.
- 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. - Diğer tarayıcı tedarikçileriyle tartışma
- WhatsApp / HTML çalışma grubu Çekme İsteği (deneme deneyimi beklemede)
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.
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:
chrome://flags/#origin-agent-cluster-default
oyununu aç- Etkinleştir'i seçin.
- 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:
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.
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
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: Finan Akbar'ın Unsplash