Güvenli olmayan bağlamlar için Özel Ağ Erişimi (PNA) hizmetinin kullanımdan kaldırılması denemesi sona eriyor. PNA izin istemini uygulayın

Yifan Luo
Yifan Luo

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?

Özel bir ağdaki, dünya genelinde benzersiz bir adı olmayan ve bu nedenle TLS sertifikası alamayan cihazlarla bağlantı kurmak için bu özellik, geliştiricilerin bu tür bir cihazla iletişim kurma niyetini beyan etmek üzere fetch() için yeni bir seçenek 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 sayede kullanıcılar ve dahili ağlar, Siteler Arası İstek Sahteciliği (CSRF) gibi olası saldırılara karşı korunur. Chrome, PNA'yı kademeli olarak uygulamaya koyuyor ve 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şiminin kullanımdan kaldırılmasına yönelik deneme, etkilenen web sitelerini HTTPS'ye taşımayla ilgili zorluklar olduğunu ortaya koydu. Özel cihazları HTTPS'ye taşımanın zor olması ve bu durumun 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.

İzin istemi ne zaman gereklidir?

Güvenli olmayan bağlamların desteğinin sonlandırılmasına yönelik deneme sürümünü, 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ızı sağlar.

İ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ı makaleye göre, 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.

Cihazların yeni izin istemiyle uyumlu olması için Private-Network-Access-Name ve Private-Network-Access-ID olmak üzere iki yeni yanıt başlığı 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 desteğinin sonlandırılmasıyla ilgili deneme sürümünden çıkma

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 üstbilgilerinizdeki deneme jetonunu silin. Deneme jetonunu nereye koyduğunuzu hatırlamıyorsanız önceki blog yayınındaki Destek sonu denemesine kaydolun bölümünü inceleyin.

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 desteklenecektir.

Gelecekte, alt çerçevelerin kullanımını kolaylaştırmak için izin politikalarını destekleyebiliriz.

Ö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 Issue Tracker'da (bileşen: Blink>SecurityFeature>CORS>PrivateNetworkAccess) veya GitHub veri havuzunda sorun bildirin.

Kaynaklar