Permintaan izin baru untuk Akses Jaringan Lokal

Chris Thompson
Chris Thompson

Dipublikasikan: 9 Juni 2025

Chrome menambahkan perintah izin baru untuk situs yang membuat koneksi ke jaringan lokal pengguna sebagai bagian dari draf spesifikasi Akses Jaringan Lokal. Tujuannya adalah untuk melindungi pengguna dari serangan pemalsuan permintaan lintas situs (CSRF) yang menargetkan router dan perangkat lainnya di jaringan pribadi, serta untuk mengurangi kemampuan situs dalam menggunakan permintaan ini untuk membuat sidik jari jaringan lokal pengguna.

Untuk memahami dampak perubahan ini terhadap ekosistem web, tim Chrome mencari masukan dari developer yang mem-build aplikasi web yang mengandalkan pembuatan koneksi ke jaringan lokal pengguna atau ke software yang berjalan secara lokal di komputer pengguna. Mulai Chrome 138, Anda dapat memilih untuk mengaktifkan batasan baru ini dengan membuka chrome://flags/#local-network-access-check dan menetapkan tanda ke "Diaktifkan (Pemblokiran)".

Apa yang dimaksud dengan Akses Jaringan Lokal?

Akses Jaringan Lokal membatasi kemampuan situs untuk mengirim permintaan ke server di jaringan lokal pengguna (termasuk server yang berjalan secara lokal di komputer pengguna), sehingga mengharuskan pengguna memberikan izin situs sebelum permintaan tersebut dapat dilakukan. Kemampuan untuk meminta izin ini dibatasi untuk konteks yang aman.

Perintah dengan teks 'Mencari dan menghubungkan ke perangkat apa pun di jaringan lokal Anda'.
Contoh dialog izin Akses Jaringan Lokal Chrome.

Banyak platform lain, seperti Android, iOS, dan MacOS memiliki izin akses jaringan lokal. Misalnya, Anda mungkin telah memberikan izin ini untuk mengakses jaringan lokal ke aplikasi Google Home saat menyiapkan perangkat Google TV dan Chromecast baru.

Jenis permintaan apa yang terpengaruh?

Untuk pencapaian pertama Akses Jaringan Lokal, kami menganggap "permintaan jaringan lokal" sebagai permintaan apa pun dari jaringan publik ke jaringan lokal atau tujuan loopback.

Jaringan lokal adalah tujuan apa pun yang me-resolve ke ruang alamat pribadi yang ditentukan di Bagian 3 RFC1918 di IPv4 (misalnya, 192.168.0.0/16), alamat IPv6 yang dipetakan IPv4 dengan alamat IPv4 yang dipetakan itu sendiri bersifat pribadi, atau alamat IPv6 di luar subnet ::1/128, 2000::/3, dan ff00::/8.

Loopback adalah tujuan apa pun yang me-resolve ke ruang "loopback" (127.0.0.0/8) yang ditentukan dalam bagian 3.2.1.3 dari RFC1122 IPv4, ruang "link-local" (169.254.0.0/16) yang ditentukan dalam RFC3927 IPv4, awalan "Unique Local Address" (fcc00::/7) yang ditentukan dalam Bagian 3 dari RFC4193 IPv6, atau awalan "link-local" (fe80::/10) yang ditentukan dalam bagian 2.5.6 dari RFC4291 IPv6.

Jaringan publik adalah tujuan lainnya.

Karena izin akses jaringan lokal dibatasi untuk konteks yang aman, dan sulit untuk memigrasikan perangkat jaringan lokal ke HTTPS, permintaan jaringan lokal yang dibatasi izin kini akan dikecualikan dari pemeriksaan konten campuran jika Chrome mengetahui bahwa permintaan akan diarahkan ke jaringan lokal sebelum me-resolve tujuan. Chrome mengetahui bahwa permintaan akan dikirim ke jaringan lokal jika:

  • Nama host permintaan adalah literal IP pribadi (misalnya, 192.168.0.1).
  • Nama host permintaan adalah domain .local.
  • Panggilan fetch() dianotasi dengan opsi targetAddressSpace: "local".
// Example 1: Private IP literal is exempt from mixed content.
fetch("http://192.168.0.1/ping");

// Example 2: `.local` domain is exempt from mixed content.
fetch("http://router.local/ping");

// Example 3: Public domain is not exempt from mixed content,
// even if it resolves to a local network address.
fetch("http://example.com/ping");

// Example 4: Adding the `targetAddressSpace` option flags that
// the request will go to the local network, and is thus exempt
// from mixed content.
fetch("http://example.com/ping", {
  targetAddressSpace: "local",
});

Yang berubah di Chrome

Chrome 138

Versi awal Akses Jaringan Lokal kami siap untuk pengujian keikutsertaan di Chrome 138. Pengguna dapat mengaktifkan perintah izin baru dengan menetapkan chrome://flags#local-network-access-check ke "Diaktifkan (Memblokir)". Hal ini mendukung pemicuan perintah izin Akses Jaringan Lokal untuk permintaan yang dimulai menggunakan JavaScript fetch() API, pemuatan sub-resource, dan navigasi subframe.

Situs demo tersedia di https://local-network-access-testing.glitch.me/ untuk memicu berbagai bentuk permintaan jaringan lokal.

Masalah umum dan batasan

  • Permintaan izin baru saat ini hanya diterapkan di Chrome Desktop. Kami sedang berupaya untuk mem-portingnya ke Chrome Android. (Dilacak di crbug.com/400455013.)
  • Koneksi WebSocket (crbug.com/421156866), WebTransport (crbug.com/421216834), dan WebRTC (crbug.com/421223919) ke jaringan lokal belum dibatasi pada izin LNA.
  • Permintaan jaringan lokal dari Pekerja Layanan saat ini mewajibkan asal pekerja layanan sebelumnya telah diberi izin Akses Jaringan Lokal.
    • Jika aplikasi Anda membuat permintaan jaringan lokal dari pekerja layanan, saat ini Anda harus memicu permintaan jaringan lokal secara terpisah dari aplikasi untuk memicu permintaan izin. (Kami sedang mengerjakan cara bagi pekerja untuk memicu perintah izin jika ada dokumen aktif yang tersedia—lihat crbug.com/404887282.)

Chrome 139 dan yang lebih baru

Tujuan kami adalah mengirimkan Akses Jaringan Lokal sesegera mungkin. Mengingat bahwa beberapa situs mungkin memerlukan waktu tambahan untuk diperbarui dengan anotasi Local Network Access, kami akan menambahkan Uji Coba Origin untuk memungkinkan situs memilih tidak ikut sementara dari persyaratan konteks aman sebelum kami mengirimkan Local Network Access secara default. Hal ini akan memberikan jalur migrasi yang lebih jelas bagi developer, terutama jika Anda mengandalkan akses ke resource jaringan lokal melalui HTTP (karena permintaan ini akan diblokir sebagai konten campuran jika diminta dari halaman HTTPS di browser yang belum mendukung pengecualian konten campuran Akses Jaringan Lokal).

Kami juga akan menambahkan kebijakan perusahaan Chrome untuk mengontrol situs mana saja yang dapat dan tidak dapat membuat permintaan jaringan lokal (sebelum memberikan atau menolak izin ke situs tersebut). Hal ini akan memungkinkan penginstalan Chrome terkelola, seperti yang ada di setelan perusahaan, untuk menghindari tampilan peringatan untuk kasus penggunaan yang diketahui, atau untuk lebih mengunci dan mencegah situs agar tidak dapat meminta izin sama sekali.

Kami berencana untuk terus mengintegrasikan izin Akses Jaringan Lokal dengan berbagai fitur yang dapat mengirim permintaan ke jaringan lokal. Misalnya, kami berencana untuk segera mengirimkan Akses Jaringan Lokal untuk koneksi WebSockets, WebTransport, dan WebRTC.

Kami akan menyampaikan informasi selengkapnya menjelang peluncuran penuh Akses Jaringan Lokal di Chrome.

Kami ingin mendapatkan masukan

Masukan sebelumnya tentang pengembangan Akses Jaringan Pribadi sangat berharga dalam memandu kami ke pendekatan izin Akses Jaringan Lokal yang baru. Kami ingin sekali lagi berterima kasih kepada semua orang yang telah terlibat selama bertahun-tahun.

Jika Anda mengembangkan atau merupakan pengguna situs yang mengandalkan koneksi ke jaringan lokal pengguna atau software yang berjalan secara lokal di komputer pengguna, tim Chrome tertarik dengan masukan dan kasus penggunaan Anda. Ada dua hal yang dapat Anda lakukan untuk membantu:

  • Buka chrome://flags#local-network-access-check, tetapkan tanda ke "Enabled (Blocking)", dan lihat apakah situs Anda memicu permintaan izin baru dengan benar (dan berfungsi seperti yang diharapkan setelah Anda memberikan izin).
  • Jika Anda mengalami masalah atau memiliki masukan, laporkan masalah di Issue Tracker Chromium atau di repositori GitHub penjelasan LNA kami. Chrome ingin mendengar pendapat Anda.