Chrome 124, karma içeriği rahatlatmak için özel ağ erişimi izni özelliğini içerir. Bu değişikliğe hazırlanmak için daha fazla zamana ihtiyacı olan siteler için devam eden bir destek sonlandırma denemesi vardır. Ancak bu deneme, 4 Şubat 2025'te kullanıma sunulması beklenen Chrome 132 ile sona erecektir. Bu yayında, yapılan değişiklik, özelliğin tasarımı, mevcut web sitelerinizi taşıma ve uygulamanızı test etme hakkında daha fazla bilgi verilmektedir.
Neler değişiyor?
Genel olarak benzersiz adları olmayan ve bu nedenle TLS sertifikaları alamayan özel bir ağ üzerinde bağlantı kurmak için bu özellik, fetch()
uygulamasına geliştiricilerin böyle bir cihazla konuşma niyetini beyan eden yeni bir seçeneği sunar. Bu kapsamda, her sitenin bu özelliğe erişimini kontrol etmek için politika kontrollü yeni bir özellik ve sunucuya ek meta veriler sağlamak üzere uçuş öncesi yanıtı için yeni üstbilgiler yer alır.
Özel Ağ Erişimi nedir?
Özel Ağ Erişimi (PNA, eski adıyla CORS-RFC1918 ve kısaca Yerel Ağ Erişimi), web sitelerinin özel ağlardaki sunuculara istek gönderme özelliğini kısıtlayan bir güvenlik özelliğidir. Bu, kullanıcıların ve dahili ağların Siteler Arası İstek Sahtekarlığı (CSRF) gibi olası saldırılara karşı korunmasına yardımcı olur. Chrome, PNA'yı kademeli olarak uygulamaya koyuyor. Koruma, gelecekteki sürümlerde genişletilecek.
İzin istemi neden gereklidir?
Chrome 94, güvenli olmayan herkese açık web sitelerinden özel ağ erişimini engelledi. Devam eden Güvenli olmayan bağlamlardan Özel Ağ Erişimi'nin sonlandırılması denemesi, etkilenen web sitelerini HTTPS'ye taşıma konusunda zorlukları ortaya çıkardı. Özel cihazları HTTPS'ye taşımanın zor olması ve bunun da karma içerik kontrolü ihlallerine yol açması yaygın bir endişe kaynağıdır.
Bu sorunu gidermek için Chrome 120'den itibaren kaynak denemesi kapsamında ve Chrome 124'ten itibaren kararlı sürümde yeni bir izin istemi eklendi.
Ne zaman izin istemi gerekir?
Güvenli olmayan bağlamların desteğinin sonlandırılmasına yönelik denemeyi, izin istemi özelliği kullanıma sunulduktan birkaç aşama sonra sonlandırmayı planlamıştık. Uyumluluğu sağlamak için herkese açık web sitelerinizi HTTPS'ye taşımanız gerekir. Özel sunucunuzu HTTPS'ye taşıyamıyorsanız yeni izin istemi özelliği, karma içerik kontrollerini daha rahat yapmanıza olanak tanır.
İzin istemi içeren özel ağ erişimi isteği için tipik iş akışı aşağıdaki gibidir.
İzin istemini tetikleme
Yeni targetAddressSpace
özelliğini getirme seçeneği olarak ekleyin. Böylece istek, karma içerik kontrolünü atlayabilir.
fetch("http://router.local/ping", {
targetAddressSpace: "private",
});
Özel Ağ Erişimi: Uçuş öncesi kontrolleri kullanıma sunuyoruz başlıklı makalede belirtildiği gibi, tüm özel ağ isteklerinden önce bir uçuş öncesi istek gönderilir. Bu ön uç isteğinde yeni bir başlık (Access-Control-Request-Private-Network: true
) yer alır ve ilgili yanıtta Access-Control-Allow-Private-Network: true
başlığı bulunmalıdır.
Yeni izin istemiyle uyumlu olması için cihazların iki yeni yanıt başlığı (Private-Network-Access-Name
ve Private-Network-Access-ID
) eklemesi gerekir.
Private-Network-Access-ID
: İki nokta işaretiyle ayrılmış 6 on altılık bayt olarak sunulan 48 bitlik bir değer.Private-Network-Access-Name
: ECMAScript normal ifadesiyle/^[a-z0-9_-.]+$/.
eşleşen geçerli bir ad (dize olarak) Adın maksimum uzunluğu 248 UTF-8 kod birimidir.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"
Demo
Demoyu https://private-network-access-permission-test.glitch.me/ adresinden inceleyebilirsiniz.
Demo web sitesini kullanmak için kişisel özel sunucunuzu başlatmanız gerekir. Özel sunucu, Access-Control-Allow-Private-Network: true
HTTP üst bilgisinin yanı sıra sunucu tarafından belirtilen Private-Network-Access-ID
ve Private-Network-Access-Name
üst bilgileriyle yanıt vermelidir. Her şey doğru ayarlandıysa aşağıdaki izin istemi gösterilir:
Güvenli olmayan bağlamı kullanımdan kaldırma denemesinden çık
Güvenli olmayan bağlamlar için özel ağ erişiminin kullanımdan kaldırılmasına ilişkin deneme sürümüne kaydolan web siteleri, web sitelerini yeni izin istemimizle taşımalı ve deneme sürümünden hemen çıkmalıdır.
Kodunuzu güncelledikten sonra HTML, JavaScript veya HTTP başlıklarınızdaki deneme jetonunu silin. Deneme jetonunu nereye yerleştirdiğinizi hatırlamıyorsanız önceki blog yayınındaki Desteği sonlandırılan deneme için kaydolma bölümüne bakın.
Deneme sürümünün sayfasında jetonu da silebilirsiniz.
Sırada ne var?
API dışı fetch()
isteklerine yönelik çözüm üzerinde hâlâ çalışılıyor.
Hizmet çalışanlarının kullanılması veya hedef adres alanının yeni bir Content-Security-Policy olarak ayarlanması gibi çeşitli çözümler test edildi. Ancak API dışı fetch()
isteklerinin nihai şekli henüz belirlenmedi.
Alt çerçevelerden gelen istekler gelecekte izin politikasıyla desteklenebilir.
Gelecekte, alt karelerin becerisini gevşetmek için izin politikalarını desteklemek isteyebiliriz.
Özel ağ kullanım alanları için geri bildirim
Özel bir ağda, herkese açık ağlardan istek alması gereken bir web sitesi barındırıyorsanız Chrome Ekibi'nin geri bildiriminizi alması gerekir. Chromium Sorun İzleyici'de (bileşen: Blink>SecurityFeature>CORS>PrivateNetworkAccess) veya GitHub deposunda bir sorunu bildirin.