Mendeklarasikan izin dan memperingatkan pengguna

Kemampuan ekstensi untuk mengakses situs dan sebagian besar Chrome API ditentukan oleh izin yang dideklarasikannya. Izin harus dibatasi hanya untuk hal yang diperlukan demi fungsinya. Membatasi izin akan menetapkan kemampuan ekstensi dan mengurangi kemungkinan terjadinya serangan ke data jika ekstensi disusupi oleh penyerang. Melindungi ekstensi dan penggunanya dengan menerapkan izin eksplisit, minimal, dan opsional.

Atur izin

Izin adalah string yang merujuk ke Chrome API atau cocok dengan pola yang memberikan akses ke satu atau beberapa host. Izin tersebut tercantum dalam manifes dan ditetapkan sebagai izin yang diperlukan atau izin opsional.

{
  "name": "Permissions Extension",
  ...
  // required permissions
  "permissions": [
    "activeTab",
    "contextMenus",
    "storage"
  ],
  // optional permissions
  "optional_permissions": [
    "topSites",
    "http://www.developer.chrome.com/*"
  ],
      ...
  "manifest_version": 2
}

Batasi izin yang diperlukan hanya pada izin yang diperlukan untuk fungsi inti ekstensi. Ekstensi tidak boleh meminta izin lebih dari yang dibutuhkan saat ini; jangan tahan masa depan dengan meminta izin yang mungkin diperlukan dengan update.

Izin yang diperlukan untuk fitur opsional harus terdaftar sebagai izin opsional. Dengan begitu, pengguna dapat menentukan seberapa banyak akses yang ingin mereka berikan ekstensi dan fitur mana yang diinginkan.

Mengidentifikasi izin yang diperlukan

Sebuah ekstensi sederhana mungkin perlu meminta beberapa izin, dan banyak izin menampilkan peringatan saat penginstalan. Pengguna lebih cenderung memercayai ekstensi yang memiliki peringatan terbatas atau jika izin dijelaskan kepada mereka.

Peringatan izin ekstensi saat penginstalan

Identifikasi fungsi inti ekstensi dan izin apa yang diperlukan untuk ekstensi tersebut. Pertimbangkan untuk menjadikan fitur opsional jika memerlukan izin dengan peringatan.

Memicu izin opsional dengan peristiwa

Fungsi inti ekstensi contoh izin opsional menggantikan halaman tab baru. Salah satu fitur menampilkan sasaran pengguna untuk hari ini. Fitur ini hanya memerlukan izin penyimpanan, tidak termasuk peringatan.

Tombol ekstensi yang mengaktifkan fitur tambahan

Ekstensi memiliki fitur tambahan; menampilkan situs teratas pengguna. Fitur ini memerlukan izin topSites, yang memiliki peringatan.

Peringatan ekstensi untuk topSites API

Mengembangkan fitur yang mengandalkan izin dengan peringatan sebagai opsional dan memperkenalkan fitur tersebut secara organik akan memberi pengguna pengantar ekstensi yang bebas risiko. Selain itu, hal ini memungkinkan pengguna menyesuaikan pengalaman mereka lebih lanjut dengan ekstensi dan menciptakan kesempatan untuk menjelaskan peringatan.

Ganti izin activeTab

Izin activeTab memberikan akses sementara ke situs tempat pengguna berada dan memungkinkan ekstensi menggunakan izin "tabs" di tab saat ini. API ini menggantikan kebutuhan akan "<all_urls>" dalam banyak kasus dan tidak menampilkan peringatan saat penginstalan.

Tanpa activeTab:

UI Izin tanpa activeTab

Dengan activeTab:

UI Izin dengan activeTab

Izin activeTab memberikan akses sementara kepada ekstensi ke tab yang saat ini aktif saat pengguna memanggil ekstensi. Jika ekstensi disusupi, penyerang harus menunggu pengguna memanggil ekstensi sebelum mendapatkan akses, dan akses tersebut hanya akan berlaku hingga tab dibuka atau ditutup.

Saat izin activeTab diaktifkan untuk tab, ekstensi dapat:

  • Panggil tabs.executeScript atau tabs.insertCSS pada tab tersebut.
  • Dapatkan URL, judul, dan favicon untuk tab tersebut melalui API yang menampilkan objek tabs.Tab.
  • Intersep permintaan jaringan di tab ke asal frame utama tab menggunakan webRequest API. Ekstensi sementara waktu mendapatkan izin host untuk asal frame utama tab.

Gestur pengguna berikut mengaktifkan activeTab:

Mengizinkan akses

Jika ekstensi perlu mengakses URL file:// atau beroperasi dalam mode samaran, pengguna harus mengaktifkan akses untuk fitur tersebut di dalam halaman detail ekstensi di chrome://extensions.

Izinkan URL file dan mode samaran di halaman detail ekstensi

Ekstensi dapat mendeteksi apakah ekstensi tersebut diaktifkan dalam mode samaran dengan memanggil extension.isAllowedIncognitoAccess() atau dapat berjalan di URL file:// dengan extension.isAllowedFileSchemeAccess() .

Memahami izin

Peringatan izin tersedia untuk menjelaskan kemampuan yang diberikan oleh API kepada pengguna ekstensi, tetapi beberapa peringatan ini mungkin tidak terlihat jelas pada awalnya. Misalnya, menambahkan izin "tabs" akan menghasilkan peringatan yang tampaknya tidak terkait: ekstensi dapat Membaca aktivitas penjelajahan Anda. Meskipun chrome.tabs API mungkin hanya digunakan untuk membuka tab baru, API ini juga dapat digunakan untuk melihat URL yang terkait dengan setiap tab yang baru dibuka menggunakan objek tabs.Tab.

Jika memungkinkan, terapkan izin opsional atau API yang kurang canggih untuk menghindari peringatan yang mengganggu.

Melihat peringatan

Tidak ada peringatan izin yang akan ditampilkan jika ekstensi dimuat sebagai file yang belum dibuka. Untuk melihat peringatan izin ekstensi, buka chrome://extensions, pastikan mode developer diaktifkan, lalu klik EKSTENSI KEMASAN.

Mode Developer Dicentang, lalu Klik Pack Extension

Tentukan jalur ke folder ekstensi di kolom direktori utama Ekstensi, lalu klik tombol Pack Extension. Abaikan kolom Kunci pribadi untuk paket pertama kali.

Tentukan Jalur Ekstensi, lalu Klik Paket Ekstensi

Chrome akan membuat dua file, file .crx dan file .pem, yang berisi kunci pribadi ekstensi.

File Ekstensi yang Dikemas

Jangan kehilangan kunci pribadi. Simpan file .pem di tempat yang rahasia dan aman; file tersebut akan diperlukan untuk mengupdate ekstensi.

Instal file .crx dengan melepaskannya ke halaman Pengelolaan Ekstensi Chrome.

Lepas File untuk Menginstal

Setelah melepaskan file .crx, browser akan bertanya apakah ekstensi dapat ditambahkan dan menampilkan peringatan.

Peringatan untuk Ekstensi Tab Baru

Izin dengan peringatan

Catatan: Tabel izin diperbarui berdasarkan upaya terbaik dan mungkin berisi sedikit perbedaan dengan peringatan saat ini. Selain itu, beberapa izin mungkin tidak menampilkan peringatan saat disambungkan dengan izin lainnya. Misalnya, peringatan "tabs" tidak akan muncul jika ekstensi juga meminta "<all_urls>". Untuk memverifikasi peringatan terbaru yang ditampilkan untuk izin ekstensi, ikuti langkah-langkah di bagian Melihat Peringatan.

Izin Deskripsi Peringatan
  • "http://*/*"
  • "https://*/*"
  • "*://*/*"
  • "<all_urls>"
Memberikan akses ekstensi ke semua host. Anda dapat menghindari mendeklarasikan izin host apa pun dengan menggunakan izin activeTab. Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"https://HostName.com/" Memberikan akses ekstensi ke "https://HostName.com/". Anda dapat menghindari mendeklarasikan izin host apa pun dengan menggunakan izin activeTab. Membaca dan mengubah data Anda di HostName.com
"bookmarks" Memberi ekstensi Anda akses ke chrome.bookmarks API. Membaca dan mengubah bookmark Anda
"clipboardRead" Wajib jika ekstensi menggunakan document.execCommand('paste'). Membaca data yang Anda salin dan tempel
"clipboardWrite" Menunjukkan bahwa ekstensi menggunakan document.execCommand('copy') atau document.execCommand('cut'). Mengubah data yang Anda salin dan tempel
"contentSettings" Memberi ekstensi Anda akses ke API chrome.contentSettings. Ubah setelan yang mengontrol akses situs ke fitur seperti cookie, JavaScript, plugin, geolokasi, mikrofon, kamera, dll.
"debugger" Memberi ekstensi Anda akses ke API chrome.debugger.
  • Mengakses backend debugger halaman
  • Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"declarativeNetRequest" Memberi ekstensi Anda akses ke chrome.declarativeNetRequest API. Memblokir konten halaman
"desktopCapture" Memberi ekstensi Anda akses ke chrome.desktopCapture API. Mengambil konten layar
"downloads" Memberi ekstensi Anda akses ke chrome.downloads API. Mengelola download Anda
"geolocation" Mengizinkan ekstensi untuk menggunakan geolocation API HTML5 tanpa meminta izin dari pengguna. Mendeteksi lokasi fisik
"history" Memberi ekstensi Anda akses ke API chrome.history. Membaca dan mengubah histori penjelajahan Anda
"management" Memberi ekstensi akses ke chrome.management API. Mengelola aplikasi, ekstensi, dan tema
"nativeMessaging" Memberi ekstensi akses ke API pesan native. Berkomunikasi dengan aplikasi native yang bekerja sama
"notifications" Memberi ekstensi Anda akses ke chrome.notifications API. Menampilkan notifikasi
"pageCapture" Memberikan akses ekstensi ke chrome.pageCapture API. Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"privacy" Memberi ekstensi akses ke chrome.privacy API. Mengubah setelan terkait privasi
"proxy" Memberikan akses ekstensi ke API chrome.proxy. Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"system.storage" Memberikan akses ekstensi ke chrome.system.storage API. Mengidentifikasi dan mengeluarkan perangkat penyimpanan
"tabCapture" Memberi ekstensi akses ke chrome.tabCapture API. Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"tabs" Memberi ekstensi akses ke kolom dengan hak istimewa untuk objek Tab yang digunakan oleh beberapa API, termasuk chrome.tabs dan chrome.windows. Dalam banyak situasi, ekstensi tidak perlu mendeklarasikan izin "tabs" untuk menggunakan API ini. Membaca histori penjelajahan Anda
"topSites" Memberikan akses ekstensi ke chrome.topSites API. Membaca daftar situs yang paling sering Anda kunjungi
"ttsEngine" Memberikan akses ekstensi ke chrome.ttsEngine API. Membaca semua teks yang diucapkan menggunakan ucapan yang disintesis
"webNavigation" Memberi ekstensi akses ke chrome.webNavigation API. Membaca histori penjelajahan Anda

Update izin

Memperbarui ekstensi dengan izin tambahan mungkin akan menonaktifkannya untuk sementara. Pengguna harus mengaktifkannya kembali setelah menyetujui setiap peringatan baru.

Jika secara manual memperbarui ekstensi yang kini menyertakan izin tab, pengguna akan mendapatkan peringatan di halaman pengelolaan.

Menambahkan Izin tab

Jika diupdate secara otomatis, ekstensi akan dinonaktifkan hingga pengguna menyetujui izin baru.

Ekstensi telah dinonaktifkan

Setujui izin

Hal ini dapat dihindari dengan menjadikan fitur baru ini opsional dan menambahkan pembaruan izin baru ke optional_permissions dalam manifes.