Web siteniz document.domain ayarını kullanıyorsa işlem yapmanız gerekir.
Neler değişiyor ve neden?
Chrome 115'ten itibaren web siteleri document.domain
ayarlayamaz: Chrome, document.domain
değerini değiştirilemez hale getirir. Kaynaklar arası iletişim kurmak için postMessage()
veya Channel Messaging 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 zaman içinde bu işlevi kullanımdan kaldırmasını bekliyoruz. Ayrıntılar için tarayıcı uyumluluğu bölümünü inceleyin.
document.domain
neden değiştirilemez hale getirilir?
document.domain
, kaynağın ana makine adını almak veya ayarlamak için tasarlanmıştır. Birçok web sitesi, document.domain
ayarını aynı sitedeki ancak farklı kaynaklı sayfalar arasında iletişime izin verecek şekilde belirler.
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, spesifikasyonda kullanıcıları bu özelliği kullanmaktan kaçınmaları konusunda uyaran bir değişikliğe yol açtı.
Ayrıntılı bilgi: document.domain neden değiştirilemez hale getiriliyor?
document.domain
bugün nasıl kullanılıyor?
Birçok web sitesi, document.domain
değerini aynı sitedeki ancak farklı kaynaklı sayfalar arasında iletişime izin verecek şekilde ayarlar.
Aynı sitede ancak farklı kaynakta olan siteler aynı eTLD+1'e ancak farklı alt alan adlarına sahiptir.
document.domain
şu ana kadar aşağıdaki şekilde kullanılmış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 document.domain
değeri '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.
Örneğin, iki sayfa document.domain
ayarladığı zaman 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.
Tarayıcı uyumluluğu
- HTML spesifikasyonu, özelliğin kaldırılması gerektiğini belirtir.
- Mozilla,
document.domain
'ı varsayılan olarak devre dışı bırakmanın prototip oluşturmaya değer olduğunu düşünüyor. - 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. - Diğer tarayıcı sağlayıcılarla görüşme
- WHATWG / HTML çalışma grubu Pull Request (deneme deneyimi beklemede)
Sitemin etkilenip etkilenmediğini nasıl anlayabilirim?
Web siteniz bu değişiklikten etkileniyorsa Chrome, 2022'de eklenen DevTools Sorunlar panelinde sizi uyarır. DevTools'un sağ üst köşesindeki sarı işarete dikkat edin.
Chrome'dan kaldırılması planlanan tüm API'leri bulmak için sitenizi Lighthouse'un desteği sonlandırılan API denetiminden de geçirebilirsiniz.
Reporting API'yi ayarladıysanız Chrome, kullanımdan kaldırılacak bu API hakkında sizi bilgilendirmek için kullanımdan kaldırma raporları göndermiştir. Mevcut rapor toplama hizmetleri veya kendi şirket içi çözümünüzü oluşturarak Reporting API'yi nasıl kullanacağınız hakkında daha fazla bilgi edinin.
Bu değişikliği nasıl görebilirim?
Bu değişiklik, Chrome 115'ten itibaren kademeli olarak uygulanacaktır. Chrome tarayıcınızda kullanıma sunulmamış olsa bile bu değişikliğin nasıl çalıştığını görmek için aşağıdaki adımları uygulayarak etkinleştirebilirsiniz:
chrome://flags/#origin-agent-cluster-default
uygulamasını aç- Etkinleştir'i seçin.
- Chrome'u yeniden başlatın.
What alternatives can I use?
En iyi seçenek, document.domain
'ü hiç değiştirmemektir (ör. sayfayı ve tüm bileşen çerçevelerini aynı kaynakta barındırarak). Bu işlem tüm tarayıcıların tüm sürümlerinde çalışır. Ancak bu, uygulamada önemli ölçüde yeniden çalışma gerektirebilir. Bu nedenle, kaynak dışı erişimleri desteklemeye devam eden alternatiflere de bakmanız önerilir.
document.domain
yerine postMessage()
veya Channel Messaging API'yi kullanın
Çoğu kullanım alanında, kaynak ötesi postMessage()
veya Channel Messaging API, document.domain
'in 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ı öğ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 sorunuzu 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.
Bu davranışı gerektiren diğer tüm belgelerin de bir Origin-Agent-Cluster
göndermesi gerekir (document.domain
yalnızca bir belge tarafından ayarlanırsa etkisinin olmadığını unutmayın).
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.
Kaynaklar
Document.domain
- Web API'leri | MDN- Kaynak İzolasyon ve
document.domain
desteğinin sonlandırılması document.domain
desteği sonlandırılıyor. · Issue #564 · w3ctag/design-reviews
Teşekkür ederiz
Unsplash'taki Finan Akbar tarafından çekilen fotoğraf