HTTPQUERY
Bahasa Indonesia

Permissions-Policy

Penggunaan

Header respons Permissions-Policy membatasi fitur browser mana yang diizinkan di dalam frame saat ini. Setiap kebijakan memasangkan sebuah direktif fitur dengan sebuah allowlist yang menentukan Origin mana saja yang dapat mengakses fitur tersebut.

Permissions-Policy: <directive>=<allowlist>

Catatan

Kebijakan awal yang direkomendasikan menonaktifkan fitur-fitur yang tidak digunakan situs: Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=(), bluetooth=(). Pemindai keamanan menandai header Permissions-Policy yang hilang. Menyetel kebijakan minimal menyelesaikan temuan tersebut tanpa memengaruhi fungsionalitas situs.

Catatan

Mekanisme Permissions-Policy sebelumnya dikenal sebagai Feature Policy.

Direktif

Nama direktif mengidentifikasi fitur browser yang hendak dikontrol. Berikut daftar direktif terstandardisasi yang tidak menyeluruh:

Catatan

Direktif interest-cohort dahulu digunakan untuk memblokir Federated Learning of Cohorts (FLoC). Google meninggalkan FLoC pada 2022 dan mengganti API tersebut dengan Topics API. Direktif interest-cohort telah dihapus dari implementasi browser.

Nilai allowlist

mengontrol origin mana saja yang dapat menggunakan fitur tersebut:

Catatan

Direktif unload memblokir penangan peristiwa unload untuk origin tersebut. Menyetel Permissions-Policy: unload=() mencegah kode pihak pertama, skrip pihak ketiga, dan ekstensi browser mendaftarkan penangan unload. Hal ini penting bagi performa back-forward cache (bfcache) karena penangan unload mencegah browser menyimpan halaman ke cache untuk navigasi maju-mundur yang instan. Chrome secara bertahap mengusangkan peristiwa unload sepenuhnya, dimulai dari situs berlalu lintas tinggi dan meluas ke seluruh situs. Menyetel unload=() berarti langsung mengikuti proses pengusangan tersebut dan menjamin kelayakan bfcache terlepas dari jadwal penerapannya.

Contoh

Pada contoh berikut, server menyatakan bahwa fitur geolocation harus dinonaktifkan di semua konteks.

Permissions-Policy: geolocation=()

Pada contoh berikut, server menyatakan bahwa fitur encrypted-media harus dinonaktifkan untuk semua Origin kecuali report.example.re.

Permissions-Policy: encrypted-media=("https://report.example.re")

Pada contoh berikut, server menyatakan bahwa fitur microphone harus dinonaktifkan untuk semua Origin kecuali dirinya sendiri dan Origin yang beralamat example.re.

Permissions-Policy: microphone=(self "https://example.re")

Memblokir penangan unload untuk meningkatkan kelayakan bfcache. Hal ini mencegah skrip dan ekstensi pihak ketiga mendaftarkan peristiwa unload yang menurunkan performa navigasi maju-mundur.

Permissions-Policy: unload=()

Pemecahan masalah

Pelanggaran Permissions-Policy dalam sebagian besar kasus muncul secara diam-diam, dengan fitur yang diblokir mengembalikan status ditolak atau melemparkan error tanpa ada prompt browser yang terlihat.

Fitur diblokir di dalam iframe karena atribut allow tidak ada. Bahkan ketika halaman induk mengizinkan sebuah fitur, iframe yang disematkan tetap memerlukan atribut allow eksplisit untuk mengakses fitur tersebut. Tambahkan atribut itu pada tag iframe:

Geolocation, camera, atau microphone tidak berfungsi setelah kebijakan disetel. Kebijakan seperti Permissions-Policy: geolocation=() menonaktifkan fitur tersebut untuk semua origin, termasuk halaman itu sendiri. Untuk mengizinkan fitur tersebut hanya pada origin yang sama, gunakan geolocation=(self). Untuk turut mengizinkan sebuah origin sematan tertentu, gunakan geolocation=(self “https://maps.example.re”). Browser tidak pernah menampilkan prompt kepada pengguna untuk fitur yang sudah ditolak oleh kebijakan.

Wildcard * tidak berfungsi untuk semua fitur. Sebagian fitur tidak mendukung nilai allowlist * dan dibatasi pada daftar origin eksplisit. Ketika * tidak berpengaruh, tentukan setiap origin yang diizinkan satu per satu. Periksa konsol browser untuk peringatan tentang nilai allowlist yang tidak dikenali atau tidak didukung.

Migrasi dari Feature-Policy ke Permissions-Policy. Header Feature-Policy yang usang menggunakan sintaks berbeda: Feature-Policy: geolocation ‘self’ dibandingkan Permissions-Policy: geolocation=(self). Browser yang mendukung Permissions-Policy mengabaikan Feature-Policy ketika kedua header hadir bersamaan. Perbarui nama header dan konversikan sintaksnya: ganti spasi dengan =, bungkus daftar origin dalam tanda kurung, dan hilangkan tanda kutip tunggal di sekitar self dan none (gunakan () alih-alih ‘none’).

Debugging dengan document.featurePolicy.allowsFeature(). Pada browser berbasis Chromium, buka Console DevTools dan jalankan document.featurePolicy.allowsFeature(‘camera’) untuk memeriksa apakah sebuah fitur diizinkan dalam konteks saat ini. Perintah ini mengembalikan true atau false. Untuk konteks iframe, berikan origin sebagai argumen kedua: document.featurePolicy.allowsFeature(‘camera’, ‘https://embed.example.re’). Firefox menggunakan document.permissionsPolicy alih-alih document.featurePolicy.