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.
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.
Ekstensi memiliki fitur tambahan; yang menampilkan situs teratas pengguna. Fitur ini memerlukan topSites, yang memiliki peringatan.
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:
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
atautabs.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
:
- Menjalankan tindakan browser
- Menjalankan tindakan halaman
- Mengeksekusi item menu konteks
- Mengeksekusi pintasan keyboard dari API perintah
- Menerima saran dari API omnibox
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.
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.
Tentukan jalur ke folder ekstensi di kolom direktori utama Ekstensi, lalu klik Tombol Paket Ekstensi. Abaikan kolom Kunci pribadi untuk paket pertama kali.
Chrome akan membuat dua file, satu file .crx
dan satu file .pem
, yang berisi ekstensi
kunci pribadi.
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.
Setelah melepaskan file .crx
, browser akan menanyakan apakah ekstensi dapat ditambahkan dan ditampilkan
peringatan.
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 |
---|---|---|
|
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. |
|
"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.
Jika ekstensi diperbarui secara otomatis, ekstensi akan dinonaktifkan hingga pengguna menyetujui izin akses.
Hal ini dapat dihindari dengan membuat fitur baru bersifat opsional dan menambahkan pembaruan izin baru ke
optional_permissions
di manifes.