Kebijakan developer dan panduan keamanan

Simon Hangl
Simon Hangl
Demián Renzulli
Demián Renzulli

Aplikasi Web Terisolasi (IWA) menyediakan model keamanan yang memungkinkan aplikasi web mengakses kemampuan canggih—seperti Direct Sockets dan Controlled Frame—yang biasanya dibatasi di web "drive-by" standar. Karena IWA beroperasi di lingkungan dengan tingkat kepercayaan yang tinggi, IWA harus mematuhi kebijakan privasi dan keamanan yang ketat. Pedoman ini dirancang untuk memastikan bahwa seiring dengan semakin kuatnya platform web, pengguna tetap aman, dan integritas lingkungan browser tetap terjaga.

Model kepercayaan IWA

Inti platform IWA dibangun berdasarkan kebijakan teknis ketat yang mewajibkan developer mempertahankan tingkat keamanan yang tinggi. Meskipun aplikasi web standar mengandalkan model izin yang fleksibel, IWA ditandatangani secara kriptografis dan dikirim menggunakan Paket Web, yang memungkinkan verifikasi asal dan integritasnya.

Sebagai imbalan atas identitas terverifikasi ini, IWA mendapatkan akses ke API yang memiliki hak istimewa. Untuk mempertahankan kepercayaan ini, developer harus mengikuti pendekatan yang mengutamakan keamanan dengan mematuhi kebijakan yang lebih ketat—termasuk Kebijakan Keamanan Konten (CSP) yang andal dan Trusted Types—yang memastikan keamanan pengguna bahkan saat menggunakan kemampuan yang canggih. Artinya:

  • Transparansi: Pengguna tidak boleh terkejut dengan penggunaan API istimewa oleh aplikasi.
  • Hak Istimewa Terendah: Aplikasi hanya boleh meminta dan menggunakan kemampuan spesifik yang diperlukan untuk tujuan yang dinyatakan.
  • Integritas Statis: Semua logika yang dapat dieksekusi harus mandiri dalam paket aplikasi untuk memungkinkan audit keamanan dan mencegah sideloading kode berbahaya.

Meskipun IWA menyertakan perlindungan bawaan yang andal—seperti Kebijakan Keamanan Konten (CSP) ketat yang mencegah eksekusi skrip eksternal—kendala teknis saja tidak dapat mengurangi setiap risiko. Bahkan dalam lingkungan yang sangat tepercaya, pola penerapan atau pilihan developer tertentu dapat secara tidak sengaja membahayakan keselamatan atau privasi pengguna. Panduan ini menguraikan skenario terbatas ini dan kebijakan yang mengatur penggunaan API istimewa.

Mengapa pedoman ini penting

Kepatuhan terhadap kebijakan ini bukan hanya tentang kepatuhan, tetapi juga tentang membangun ekosistem yang berkelanjutan untuk aplikasi web canggih. Dengan mengikuti panduan ini, Anda memastikan bahwa aplikasi Anda:

  • Menghindari regresi keamanan: Mencegah kerentanan seperti Pembuatan Skrip Lintas Situs (XSS) dan eksekusi kode jarak jauh dengan menjaga agar logika tetap mandiri.
  • Melindungi privasi pengguna: Memastikan data sensitif dan akses hardware hanya ditangani dengan maksud dan transparansi pengguna yang jelas.
  • Memastikan keberlanjutan platform: Membantu mempertahankan standar keamanan tinggi yang diperlukan agar platform IWA dapat terus memperluas rangkaian kemampuannya.

Prinsip inti

Transparansi dan maksud pengguna

Aturan paling mendasar adalah: jangan mengejutkan pengguna. Perilaku aplikasi Anda harus sesuai dengan tujuan yang dinyatakan dan ekspektasi pengguna.

  • Tetap dalam cakupan: Jangan menerapkan fungsi yang melampaui tujuan jelas aplikasi Anda.
  • Jejak API minimal: Hanya minta dan gunakan kumpulan API IWA tertentu yang diperlukan untuk mencapai fungsi inti aplikasi Anda.

Tidak ada sideload kode dinamis

Model keamanan IWA bergantung pada kemampuan administrator atau vendor browser untuk memverifikasi semua logika yang dapat dieksekusi. Oleh karena itu, paket IWA Anda harus mandiri. Platform ini menerapkannya melalui Kebijakan Keamanan Konten (CSP) ketat yang memblokir eksekusi berbasis string seperti eval() dan new Function():

script-src 'self' 'wasm-unsafe-eval';
require-trusted-types-for 'script';

Meskipun CSP memungkinkan 'wasm-unsafe-eval' mendukung WebAssembly, Anda tidak boleh melewati semangat batas keamanan ini.

Praktik yang sangat dilarang

  • Mengirimkan interpreter untuk kode jarak jauh: Anda tidak boleh menyertakan interpreter kode (misalnya, Python atau Lua yang dikompilasi ke WASM) untuk mendownload dan mengeksekusi skrip eksternal menggunakan akses jaringan yang memiliki hak istimewa seperti Soket Langsung.
  • Logika yang dimuat dari jarak jauh: Jangan gunakan service worker untuk menyematkan kode yang dimuat dari jarak jauh ke origin IWA.
  • Kode versus data: Meskipun mendownload data (seperti JSON) diizinkan, mendownload kode apa pun yang dimaksudkan untuk ditafsirkan atau dijalankan merupakan pelanggaran langsung terhadap kebijakan.

Prinsip hak istimewa terendah

Selalu gunakan API yang paling tidak canggih yang mampu menyelesaikan tugas. API khusus IWA yang memiliki hak istimewa tidak boleh digunakan sebagai jalan pintas untuk melewati batasan keamanan atau perintah pengguna dari Web API standar. Tabel berikut menguraikan kasus penggunaan umum untuk membantu Anda memutuskan kapan harus menggunakan API Web tradisional versus kemampuan khusus IWA:

Tugas Menggunakan Web API standar (Direkomendasikan) Menghindari API IWA istimewa (Terbatas)
Akses hard drive eksternal Gunakan File System Access API untuk I/O file standar. Jangan gunakan WebUSB Tanpa Batas untuk mengakses penyimpanan.
Interaksi kartu smart Gunakan Smart Card API. Jangan gunakan WebUSB Tanpa Batas untuk kartu smart.
Komunikasi perangkat serial Gunakan WebSerial API jika sudah cukup untuk perangkat Anda. Hindari WebUSB Tanpa Batas jika WebSerial dapat melakukan tugas.
Menyematkan konten tepercaya Gunakan <iframe> standar. Jangan gunakan <controlledframe> untuk penyematan sederhana kecuali jika isolasi diperlukan.

Pedoman khusus API

API IWA menyediakan kemampuan canggih yang biasanya dibatasi di browser. Panduan umumnya adalah jangan pernah menggunakan fitur istimewa ini dengan cara yang akan mengejutkan pengguna atau mengompromikan kepercayaan dan data mereka.

Direct Sockets API

Direct Sockets API memberikan akses TCP dan UDP mentah, termasuk akses multicast dan jaringan lokal.

Diizinkan

  • Mendukung protokol kustom: Menghubungkan ke server jarak jauh yang menggunakan protokol kustom yang saat ini tidak memiliki Web API tingkat yang lebih tinggi.
  • Memelihara layanan backend: Terhubung ke server yang telah ditentukan dan dikodekan secara permanen yang digunakan khusus untuk layanan backend aplikasi Anda.
  • Menemukan hardware penting: Mengakses jaringan lokal atau menggunakan multicast untuk menemukan hardware tertentu yang terkait dan penting untuk fungsi aplikasi (misalnya, aplikasi pengeditan video yang menemukan penyimpanan yang terhubung ke jaringan).

Tidak diizinkan

  • Mengejutkan pengguna: Menerapkan akses jaringan yang tidak dijustifikasi dengan jelas oleh fungsi utama aplikasi, seperti editor teks yang berkomunikasi dengan perangkat jaringan lokal.
  • Memindai jaringan secara arbitrer: Melakukan pemindaian luas pada jaringan lokal pengguna (misalnya, pemindaian port 192.168.1.0/24) untuk membuat profil pengguna atau menemukan perangkat yang tidak terkait.
  • Menargetkan perangkat lokal: Mencoba menyelidiki, mengonfigurasi ulang, atau menyerang perangkat lain di jaringan lokal dilarang keras.

Controlled Frame API

Elemen <controlledframe> memungkinkan penyematan dan modifikasi konten lintas origin, termasuk injeksi skrip dan perubahan header.

Diizinkan

  • Menyederhanakan antarmuka pengguna: Menyematkan layanan pihak ketiga dan menyisipkan CSS untuk menyembunyikan elemen UI yang tidak relevan atau memberikan pengalaman yang lebih kohesif.
  • Memediasi komunikasi yang aman: Bertindak sebagai penjaga gerbang dengan menerima permintaan dari halaman yang disematkan dengan postMessage dan hanya menampilkan data yang diperlukan dan telah di-santisasi yang diambil melalui API istimewa.

Tidak diizinkan

  • Mencuri kredensial pengguna: Menyuntikkan skrip untuk mengambil sandi, cookie sesi, atau data pengguna sensitif lainnya dari konten yang disematkan.
  • Melanggar persyaratan layanan: Mengubah platform sematan dengan cara yang melanggar Persyaratan Layanan mereka, seperti mengklik iklan secara terprogram atau melakukan scraping yang tidak sah.
  • Membuat proxy akses istimewa: Membuat pass-through yang memberikan akses langsung atau tidak terkontrol ke API IWA istimewa untuk konten sematan yang tidak tepercaya.
  • Menerapkan AI yang tidak terkontrol: Melakukan tindakan atas nama pengguna yang login melalui AI tanpa batasan kasus penggunaan yang spesifik dan transparan.

Perekaman layar tanpa batasan

Memungkinkan screenshot tanpa perintah izin pengguna berulang yang ditemukan di web standar.

Diizinkan

  • Menyediakan fungsi inti: Menggunakan screenshot sebagai bagian yang jelas dari layanan aplikasi, seperti dalam fitur rekaman tutorial atau rapat virtual.
  • Memastikan kesadaran pengguna: Memberi tahu pengguna dengan jelas bahwa perekaman dapat terjadi sebelum mereka berinteraksi dengan aplikasi.

Tidak diizinkan

  • Merekam secara diam-diam: Merekam layar pengguna tanpa sepengetahuan dan izin eksplisit dari pengguna sebelumnya.
  • Melanggar peraturan privasi: Melakukan praktik perekaman apa pun yang melanggar hukum privasi setempat atau internasional.

WebUSB tidak dibatasi

WebUSB Tanpa Batas melewati daftar perangkat yang diblokir WebUSB standar untuk memungkinkan interaksi tingkat rendah dengan perangkat.

Diizinkan

  • Mendukung hardware eksklusif: Berinteraksi dengan hardware khusus atau lama yang tidak memiliki API web tingkat tinggi, seperti pengontrol industri.

Sekarang diizinkan

  • Melewati API khusus: Menggunakan WebUSB untuk perangkat yang memiliki API yang lebih spesifik dan terbatas, seperti kartu smart (gunakan Smart Card API) atau penyimpanan eksternal (gunakan File System Access API).

Pengelolaan jendela (window.open dan window.focus)

IWA dapat membuat jendela pop-up dan fokus tanpa gestur pengguna yang diperlukan oleh web standar.

Diizinkan

  • Memberi tahu penyelesaian tugas: Memfokuskan jendela aplikasi saat tugas latar belakang penting yang dimulai pengguna, seperti rendering video, selesai.

Tidak diizinkan

  • Spam: Membanjiri pengguna dengan beberapa jendela yang tidak diminta.
  • Phishing: Membuka jendela yang didesain untuk meniru dialog sistem atau menipu pengguna.
  • Mencuri fokus: Mengganggu pengguna dengan mencuri fokus dari aplikasi lain untuk peristiwa yang tidak penting.

Kesimpulan

Arsitektur keamanan Aplikasi Web Terisolasi dirancang untuk mendukung developer sekaligus mempertahankan lingkungan yang sangat tepercaya bagi pengguna. Dengan mematuhi pedoman ini, Anda memastikan aplikasi Anda tetap menjadi bagian yang bertanggung jawab dari ekosistem IWA. Hal-hal paling penting yang dapat dipelajari dari panduan ini meliputi:

  • Prioritaskan Transparansi: Perilaku aplikasi Anda harus selalu sesuai dengan tujuan yang dinyatakan; jangan pernah menerapkan fungsi yang akan mengejutkan atau mengkhianati pengguna.
  • Terapkan Integritas Paket: Semua logika yang dapat dieksekusi harus mandiri dalam paket IWA Anda agar memungkinkan verifikasi statis. Melewati model keamanan melalui sideload kode dinamis atau interpreter jarak jauh sangat dilarang.
  • Patuhi Prinsip Hak Istimewa Terkecil: Selalu pilih API yang paling dibatasi yang tersedia untuk tugas tertentu. API IWA yang memiliki hak istimewa hanya boleh digunakan jika API Web standar tidak cukup untuk fungsi inti aplikasi.
  • Bertindak sebagai Penjaga: Saat menggunakan alat canggih seperti <controlledframe>, IWA Anda harus bertindak sebagai perantara yang aman, bukan proxy transparan untuk konten yang tidak tepercaya.

Sebelum memublikasikan IWA, lakukan audit akhir pada penerapan Anda dengan menanyakan:

  1. Apakah saya menggunakan API yang paling sederhana dan paling terbatas untuk tugas ini?
  2. Apakah pengguna akan terkejut atau merasa dikhianati oleh tindakan yang dilakukan aplikasi saya?

Jika jawaban untuk pertanyaan pertama adalah "Tidak" atau pertanyaan kedua adalah "Ya", aplikasi Anda kemungkinan melanggar kebijakan keamanan IWA dan dapat dihapus.