Mendeklarasikan izin dan memperingatkan pengguna

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

Atur izin

Izin adalah string yang diketahui dan merujuk pada Chrome API atau pola pencocokan yang memberikan akses ke satu atau beberapa {i>host<i}. Mereka tercantum dalam manifes dan ditetapkan sebagai izin atau izin yang diperlukan 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 hal yang diperlukan untuk fungsi inti ekstensi. Channel ekstensi tidak boleh meminta izin akses lebih dari yang dibutuhkan saat ini; tidak siap menghadapi masa depan dengan meminta izin akses yang mungkin diperlukan dengan pembaruan.

Izin yang diperlukan untuk fitur opsional harus terdaftar sebagai izin opsional. Ini memungkinkan pengguna memutuskan seberapa banyak akses yang ingin mereka berikan ekstensi dan fitur mana yang diinginkan.

Identifikasi izin yang diperlukan

Ekstensi sederhana mungkin perlu meminta beberapa izin, dan banyak izin ditampilkan peringatan saat penginstalan. Pengguna lebih cenderung memercayai ekstensi dengan peringatan terbatas atau ketika izin akses dijelaskan kepada mereka.

Peringatan izin ekstensi saat penginstalan

Mengidentifikasi fungsi inti sebuah ekstensi dan izin yang diperlukan untuk ekstensi tersebut. Pertimbangkan membuat fitur bersifat opsional jika memerlukan izin dengan peringatan.

Memicu izin opsional dengan peristiwa

Fungsi inti contoh izin opsional menggantikan halaman tab baru. Salah satu fitur adalah menampilkan sasaran pengguna hari ini. Fitur ini hanya memerlukan penyimpanan izin akses, yang tidak menyertakan peringatan.

Tombol ekstensi yang mengaktifkan fitur tambahan

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

Peringatan ekstensi untuk topSites API

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

Mengganti izin activeTab

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

Tanpa activeTab:

UI Izin tanpa activeTab

Dengan activeTab:

UI izin dengan activeTab

Izin activeTab memberikan akses sementara kepada ekstensi ke tab yang sedang aktif ketika pengguna memanggil ekstensi. Jika ekstensi disusupi, penyerang harus menunggu agar pengguna memanggil ekstensi sebelum mendapatkan akses, dan akses itu hanya akan berlaku hingga tab dinavigasi atau ditutup.

Saat izin activeTab diaktifkan untuk sebuah tab, ekstensi dapat:

  • Panggil tabs.executeScript atau tabs.insertCSS di tab tersebut.
  • Dapatkan URL, judul, dan favicon untuk tab tersebut melalui API yang menampilkan objek tabs.Tab.
  • Mencegah permintaan jaringan di tab ke asal frame utama tab menggunakan webRequest Compute Engine API. Ekstensi untuk sementara 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 diaktifkan dalam mode samaran dengan memanggil extension.isAllowedIncognitoAccess() atau dapat berjalan di URL file:// dengan extension.isAllowedFileSchemeAccess()

Memahami izin

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

Jika memungkinkan, implementasikan izin opsional atau API yang kurang canggih agar tidak mengkhawatirkan peringatan.

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 dan klik PAKET EKSTENSI.

Mode Pengembang Dicentang lalu Klik Ekstensi Paket

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

Tentukan Jalur Ekstensi, lalu Klik Ekstensi Paket

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

File Ekstensi yang Dikemas

Jangan sampai kehilangan kunci pribadi! Menyimpan file .pem di tempat yang rahasia dan aman; CANNOT TRANSLATE perlu mengupdate ekstensi.

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

Lepaskan File untuk Menginstal

Setelah melepaskan file .crx, browser akan menanyakan apakah ekstensi dapat ditambahkan dan ditampilkan peringatan.

Peringatan untuk Ekstensi Tab Baru

Izin dengan peringatan

Catatan: Tabel izin diperbarui atas dasar 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 ditampilkan jika ekstensi juga meminta "<all_urls>". Guna memverifikasi peringatan terbaru yang ditampilkan untuk izin ekstensi, ikuti langkah-langkah dalam Melihat Peringatan.

Izin Deskripsi Peringatan
  • "http://*/*"
  • "https://*/*"
  • "*://*/*"
  • "<all_urls>"
Memberikan akses ekstensi ke semua host. Anda bisa menghindari mendeklarasikan izin akses {i>host<i} apa pun dengan izin activeTab. Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"https://HostName.com/" Memberi ekstensi akses ke "https://HostName.com/". Anda dapat menghindari mendeklarasikan izin host menggunakan izin activeTab. Membaca dan mengubah data Anda di HostName.com
"bookmarks" Memberi ekstensi akses ke API chrome.bookmarks. Membaca dan mengubah bookmark Anda
"clipboardRead" Wajib ada 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 akses ke API chrome.contentSettings. Ubah setelan yang mengontrol situs akses 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 API chrome.declarativeNetRequest. Memblokir konten halaman
"desktopCapture" Memberi ekstensi Anda akses ke API chrome.desktopCapture. Mengambil konten layar Anda
"downloads" Memberikan akses ekstensi Anda ke API chrome.downloads. Mengelola download Anda
"geolocation" Mengizinkan ekstensi untuk menggunakan geolocation API HTML5 tanpa meminta izin dari pengguna. Mendeteksi lokasi fisik
"history" Memberi ekstensi akses ke API chrome.history. Membaca dan mengubah histori penjelajahan Anda
"management" Memberi ekstensi akses ke API chrome.management. Mengelola aplikasi, ekstensi, dan tema
"nativeMessaging" Memberi ekstensi akses ke API pesan native. Berkomunikasi dengan aplikasi native yang kooperatif
"notifications" Memberi ekstensi Anda akses ke API chrome.notifications. Menampilkan notifikasi
"pageCapture" Memberi ekstensi akses ke API chrome.pageCapture. Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"privacy" Memberi ekstensi akses ke API chrome.privacy. 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" Memberi ekstensi akses ke API chrome.system.storage. Mengidentifikasi dan mengeluarkan perangkat penyimpanan
"tabCapture" Memberi ekstensi akses ke API chrome.tabCapture. Membaca dan mengubah semua data Anda di situs yang Anda kunjungi
"tabs" Memberikan akses ekstensi ke kolom hak istimewa objek Tab yang digunakan oleh beberapa API termasuk chrome.tabs dan chrome.windows. Di beberapa dalam banyak situasi, ekstensi tidak perlu mendeklarasikan izin "tabs" untuk menggunakan API ini. Membaca histori penjelajahan Anda
"topSites" Memberi ekstensi akses ke API chrome.topSites. Membaca daftar situs yang paling sering Anda kunjungi
"ttsEngine" Memberi ekstensi akses ke API chrome.ttsEngine. Membaca semua teks yang diucapkan menggunakan ucapan yang disintesis
"webNavigation" Memberi ekstensi akses ke chrome.webNavigation API. Membaca histori penjelajahan Anda

Update izin

Mengupdate ekstensi dengan izin tambahan dapat menonaktifkannya untuk sementara. Pengguna harus mengaktifkannya kembali setelah menyetujui setiap peringatan baru.

Jika pengguna memperbarui ekstensi yang sekarang menyertakan izin tab secara manual, dia akan mendapatkan peringatan pada halaman pengelolaan.

Izin Menambahkan tab

Jika ekstensi diperbarui secara otomatis, ekstensi akan dinonaktifkan hingga pengguna menyetujui izin akses.

Ekstensi telah dinonaktifkan

Setujui izin

Hal ini dapat dihindari dengan membuat fitur baru bersifat opsional dan menambahkan pembaruan izin baru ke optional_permissions di manifes.