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 izin Akses Jaringan Pribadi untuk melonggarkan konten campuran. Ada uji coba penghentian yang sedang berlangsung untuk situs yang memerlukan lebih banyak waktu untuk mempersiapkan diri menghadapi perubahan ini, tetapi uji coba ini berakhir dengan Chrome 132, yang diperkirakan akan diluncurkan pada 4 Februari 2025. Postingan ini menjelaskan perubahan tersebut, lebih lanjut tentang desain fitur, cara memigrasikan situs Anda saat ini, dan cara menguji penerapan Anda.

Apa saja yang berubah?

Untuk membuat koneksi ke perangkat di jaringan pribadi yang tidak memiliki nama unik secara global, sehingga tidak dapat memperoleh sertifikat TLS, fitur ini memperkenalkan opsi baru ke 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 guna memberikan metadata tambahan.

Apa yang dimaksud dengan 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. Hal 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. Akses Jaringan Pribadi yang berkelanjutan dari uji coba penghentian penggunaan konteks tidak aman telah menunjukkan adanya tantangan dalam memigrasikan situs yang terpengaruh ke HTTPS. Masalah umum adalah kesulitan memigrasikan perangkat pribadi ke HTTPS, yang menyebabkan pelanggaran pemeriksaan konten campuran.

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

Kapan perintah izin diperlukan?

Kami berencana untuk mengakhiri uji coba penghentian penggunaan 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 umum untuk permintaan Akses Jaringan Pribadi dengan permintaan izin adalah sebagai berikut.

Memicu perintah izin

Tambahkan atribut targetAddressSpace baru sebagai opsi pengambilan, lalu permintaan 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 pra-penerbangan 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 menyertakan dua header respons baru: Private-Network-Access-Name dan Private-Network-Access-ID.

  • Private-Network-Access-ID: Nilai 48-bit yang 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 header HTTP Access-Control-Allow-Private-Network: true, beserta header Private-Network-Access-ID dan Private-Network-Access-Name yang ditentukan server. Jika semuanya disetel dengan benar, perintah izin berikut akan ditampilkan:

Keluar dari uji coba penghentian penggunaan konteks yang tidak aman

Untuk situs yang mendaftar ke uji coba penghentian penggunaan Akses Jaringan Pribadi untuk konteks yang tidak aman, ini adalah waktunya untuk memigrasikan situs Anda dengan permintaan izin baru kami dan keluar dari uji coba sekarang.

Setelah memperbarui kode, hapus token uji coba di header HTML, JavaScript, atau HTTP. Jika Anda tidak ingat tempat Anda memasukkan token uji coba, lihat Bagian mendaftar untuk uji coba penghentian di postingan blog sebelumnya.

Sebaiknya Anda juga 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 sub-frame mungkin didukung dengan kebijakan izin pada masa mendatang.

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

Masukan untuk kasus penggunaan jaringan pribadi

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

Resource