Perangkat di Local Area Network (LAN) dapat diakses oleh aplikasi apa pun yang memiliki izin
INTERNET
.
Hal ini memudahkan aplikasi untuk terhubung ke perangkat lokal, tetapi juga menimbulkan implikasi privasi seperti membentuk sidik jari pengguna dan menjadi proxy untuk lokasi.
Project Perlindungan Jaringan Lokal bertujuan untuk melindungi privasi pengguna dengan membatasi akses ke jaringan lokal di balik izin runtime baru.
Dampak
Selama Android 16, izin ini adalah fitur keikutsertaan yang berarti hanya aplikasi yang memilih untuk menggunakan fitur ini yang akan terpengaruh. Tujuan keikutsertaan ini adalah agar developer aplikasi memahami bagian aplikasi mereka yang bergantung pada akses jaringan lokal implisit sehingga mereka dapat bersiap untuk melindungi izinnya pada rilis Android mendatang.
Aplikasi akan terpengaruh jika mengakses jaringan lokal pengguna menggunakan:
- Penggunaan soket mentah secara langsung atau melalui library pada alamat jaringan lokal, misalnya,
Multicast DNS (mDNS)
atauSimple Service Discovery Protocol (SSDP)
. - Penggunaan class tingkat framework yang mengakses jaringan lokal, misalnya,
NsdManager
.
Detail dampak
Traffic ke dan dari alamat jaringan lokal memerlukan izin akses jaringan lokal. Tabel berikut mencantumkan beberapa kasus umum:
Operasi Jaringan Tingkat Rendah Aplikasi | Izin Jaringan Lokal Diperlukan |
---|---|
Membuat koneksi TCP keluar | ya |
Menerima koneksi TCP masuk | ya |
Mengirim unicast, multicast, siaran UDP | ya |
Menerima unicast, multicast, siaran UDP masuk | ya |
Pembatasan ini diterapkan jauh di dalam stack jaringan, sehingga berlaku untuk semua API jaringan. Hal ini mencakup soket yang dibuat di platform
atau kode terkelola, library jaringan seperti Cronet dan OkHttp, serta API apa pun
yang diimplementasikan di atasnya. Mencoba menyelesaikan layanan di jaringan lokal
yang memiliki sufiks .local
memerlukan izin jaringan lokal.
Pengecualian untuk aturan sebelumnya:
- Jika server DNS perangkat berada di jaringan lokal, traffic ke / dari server tersebut (di port 53) tidak memerlukan izin akses jaringan lokal.
- Aplikasi yang menggunakan Pengalih Output sebagai pemilih dalam aplikasinya tidak memerlukan izin jaringan lokal (panduan lebih lanjut akan tersedia pada rilis mendatang).
Panduan
Untuk mengaktifkan batasan jaringan lokal, lakukan hal berikut:
- Mem-flash perangkat Anda ke build dengan Android 16 Beta 3 atau yang lebih baru
- Menginstal aplikasi yang akan diuji
Mengganti konfigurasi Appcompat menggunakan adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
Mulai ulang perangkat
Sekarang akses aplikasi Anda ke jaringan lokal dibatasi dan setiap upaya untuk mengakses jaringan lokal akan menyebabkan error soket.
Jika Anda menggunakan API yang melakukan operasi jaringan lokal di luar proses aplikasi Anda—misalnya, NsdManager
—API tersebut tidak terpengaruh selama keikutsertaan.
Untuk memulihkan akses, Anda harus memberikan izin aplikasi Anda untuk NEARBY_WIFI_DEVICES
.
- Pastikan aplikasi mendeklarasikan izin
NEARBY_WIFI_DEVICES
dalammanifest
-nya. - Buka Setelan > Aplikasi > [Nama Aplikasi] > Izin > Perangkat di sekitar > Izinkan
Sekarang, akses aplikasi Anda ke jaringan lokal akan dipulihkan dan semua skenario Anda akan berfungsi seperti sebelum mengikutsertakan aplikasi. Berikut pengaruhnya terhadap traffic jaringan aplikasi.
Izin | Permintaan LAN Keluar | Permintaan Internet Keluar/Masuk | Permintaan LAN Masuk |
---|---|---|---|
Diberikan | Works | Works | Works |
Tidak Diberikan | Gagal | Works | Gagal |
Gunakan perintah berikut untuk menonaktifkan konfigurasi Appcompat
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Error
Error yang muncul dari batasan ini akan ditampilkan ke soket panggilan setiap kali soket memanggil send
atau varian send
ke alamat jaringan lokal.
Contoh error:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Bug
Kirimkan bug dan masukan untuk:
- Perbedaan dalam akses LAN (Anda tidak menganggap akses tertentu sebagai akses "jaringan lokal")
- Bug saat akses LAN seharusnya diblokir, tetapi tidak
- Bug yang menyebabkan akses LAN seharusnya tidak diblokir, tetapi diblokir
Hal berikut tidak akan terpengaruh oleh perubahan ini:
- Akses ke Internet
- Jaringan Seluler