Uji coba penghentian penggunaan Akses Jaringan Pribadi (PNA) untuk konteks yang tidak aman akan berakhir—terapkan dialog izin PNA

Yifan Luo
Yifan Luo

Chrome 124 menyertakan fitur Akses Jaringan Pribadi untuk menyesuaikan konten campuran. Ada uji coba penghentian penggunaan yang sedang berlangsung untuk situs yang memerlukan lebih banyak waktu untuk bersiap menghadapi perubahan ini, tetapi uji coba ini akan berakhir dengan Chrome 126, dan diperkirakan akan dirilis pada 4 September 2024. Postingan ini menjelaskan perubahan tersebut, informasi selengkapnya tentang desain fitur, cara memigrasikan situs saat ini, dan cara menguji penerapan Anda.

Apa saja yang berubah?

Untuk membuat koneksi ke perangkat pada jaringan pribadi yang tidak memiliki nama unik secara global, sehingga tidak dapat memperoleh sertifikat TLS, fitur ini memperkenalkan opsi baru pada fetch() untuk mendeklarasikan intent developer untuk berbicara dengan perangkat tersebut. Hal ini mencakup fitur baru yang dikontrol kebijakan untuk membatasi akses setiap situs ke kemampuan ini, dan header baru untuk respons preflight server untuk memberikan metadata tambahan.

Apa itu Akses Jaringan Pribadi?

Private Network Access (PNA, sebelumnya dikenal sebagai CORS-RFC1918 dan secara singkat sebagai Local Network Access) adalah fitur keamanan yang membatasi kemampuan situs untuk mengirim permintaan ke server di jaringan pribadi. Tindakan ini membantu melindungi pengguna dan jaringan internal dari potensi serangan seperti Pemalsuan Permintaan Lintas Situs (CSRF). Chrome telah menerapkan PNA secara bertahap, dan perlindungan akan diperluas dalam rilis mendatang.

Mengapa dialog izin diperlukan?

Chrome 94 memperkenalkan pemblokiran akses jaringan pribadi dari situs publik yang tidak aman. Uji coba penghentian penggunaan Akses Jaringan Pribadi dari konteks yang tidak aman yang sedang berlangsung telah mengungkapkan tantangan dalam memigrasikan situs yang terpengaruh ke HTTPS. Masalah umum adalah sulitnya memigrasikan perangkat pribadi ke HTTPS, yang menyebabkan pelanggaran pemeriksaan konten campuran.

Untuk mengatasi tantangan ini, permintaan izin baru telah ditambahkan pada uji coba origin dari Chrome 120, dan dalam versi stabil dari Chrome 124.

Kapan dialog izin diperlukan?

Kami berencana untuk mengakhiri uji coba penghentian penggunaan dengan konteks yang tidak aman beberapa tahap setelah fitur permintaan izin tersedia. Untuk memastikan kompatibilitas, Anda harus memigrasikan situs publik ke HTTPS. Jika Anda tidak dapat memigrasikan server pribadi ke HTTPS, fitur permintaan izin baru akan memungkinkan Anda melonggarkan pemeriksaan konten campuran.

Alur kerja standar untuk permintaan Akses Jaringan Pribadi dengan dialog izin adalah sebagai berikut.

Memicu dialog izin

Dengan menambahkan atribut targetAddressSpace baru sebagai opsi pengambilan, maka permintaan tersebut dapat melewati pemeriksaan konten campuran.

fetch("http://router.local/ping", {
  targetAddressSpace: "private",
});

Sesuai dengan Akses Jaringan Pribadi: memperkenalkan preflight, setiap permintaan jaringan pribadi didahului dengan permintaan preflight. Permintaan preflight ini akan menyertakan header baru, Access-Control-Request-Private-Network: true, dan respons yang sesuai harus menyertakan header Access-Control-Allow-Private-Network: true.

Untuk mengakomodasi permintaan izin baru, perangkat harus menggabungkan dua header respons baru: Private-Network-Access-Name dan Private-Network-Access-ID.

  • Private-Network-Access-ID: Nilai 48-bit ditampilkan sebagai 6 byte heksadesimal yang dipisahkan oleh titik dua.
  • Private-Network-Access-Name: Nama yang valid sebagai string yang cocok dengan ekspresi reguler ECMAScript /^[a-z0-9_-.]+$/. Panjang maksimum nama adalah 248 unit kode UTF-8.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"

Demo

Anda dapat melihat demonya di: https://private-network-access-permission-test.glitch.me/.

Anda harus memulai server pribadi pribadi untuk menggunakan situs demo. Server pribadi harus merespons dengan Access-Control-Allow-Private-Network: true header HTTP, beserta header yang ditentukan server Private-Network-Access-ID dan Private-Network-Access-Name. Jika semuanya disetel dengan benar, dialog izin berikut akan ditampilkan:

Keluar dari uji coba penghentian penggunaan konteks yang tidak aman

Untuk situs yang mendaftarkan uji coba penghentian penggunaan akses konteks tidak aman, ini saatnya Anda memigrasikan situs dengan dialog izin baru dan keluar dari uji coba sekarang.

Setelah memperbarui kode Anda, hapus token uji coba di header HTML, JavaScript, atau HTTP Anda. Jika Anda tidak ingat tempat Anda menempatkan token uji coba, lihat bagian Mendaftar untuk uji coba penghentian penggunaan di postingan blog sebelumnya.

Anda juga dapat menghapus token di halaman uji coba.

Apa langkah selanjutnya?

Solusi untuk permintaan dari fetch() non-API masih dalam eksplorasi.

Beberapa solusi telah diuji, misalnya, menggunakan pekerja layanan atau membuat ruang alamat target sebagai Kebijakan Keamanan Konten yang baru. Namun, bentuk akhir untuk permintaan dari fetch() non-API masih dalam penyelidikan.

Permintaan dari subframe mungkin didukung dengan kebijakan izin pada masa mendatang.

Di masa mendatang, kita mungkin ingin mendukung kebijakan izin untuk melonggarkan kemampuan sub frame.

Masukan untuk kasus penggunaan jaringan pribadi

Jika Anda menghosting situs di jaringan pribadi yang memerlukan permintaan dari jaringan publik, tim Chrome membutuhkan masukan Anda. Laporkan masalah di Chromium Issue Tracker (komponen: Blink>SecurityFeature>CORS>PrivateNetworkAccess) atau di repositori GitHub.

Referensi