W3C mengatakan ada atribut baru di HTML5.1 disebut nonce
untuk style
dan script
yang dapat digunakan oleh Content Kebijakan Keamanan dari sebuah situs web.
Saya mencari di Google tetapi akhirnya tidak mengerti apa yang sebenarnya dilakukan atribut ini dan apa yang berubah saat menggunakannya?
script
danstyle
? Sesuatu seperti larangan hotlink?Jawaban:
The
nonce
atribut memungkinkan Anda untuk “daftar putih” inline tertentuscript
danstyle
elemen, sambil menghindari penggunaan CSPunsafe-inline
direktif (yang akan memungkinkan semua inlinescript
/style
), sehingga Anda masih mempertahankan fitur CSP kunci melarang inlinescript
/style
pada umumnya.Jadi
nonce
atributnya adalah cara memberitahu browser bahwa konten inline dari skrip atau elemen gaya tertentu tidak disuntikkan ke dalam dokumen oleh beberapa pihak ketiga (jahat), tetapi dimasukkan ke dalam dokumen dengan sengaja oleh siapa pun yang mengendalikan server, dokumen tersebut dilayani dari.https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it memberikan contoh yang baik tentang bagaimana menggunakan
nonce
atribut, yang sama dengan langkah-langkah berikut:Untuk setiap permintaan yang diterima server Web Anda untuk dokumen tertentu, minta backend Anda membuat string acak yang dikodekan base64 setidaknya 128 bit data dari generator nomor acak yang aman secara kriptografis; misalnya
EDNnf03nceIOfn39fn3e9h3sdfa
,. Itu kekuranganmu.Ambil nonce yang dihasilkan pada langkah 1, dan untuk inline
script
/style
Anda ingin "daftar putih", buat kode backend Anda memasukkannonce
atribut ke dalam dokumen sebelum dikirim melalui kabel, dengan nilai itu sebagai nilainya:Ambil nonce yang dihasilkan di langkah 1, tambahkan
nonce-
dulu, dan buat backend Anda menghasilkan header CSP dengan nilai di antara daftar sumber untukscript-src
ataustyle-src
:Jadi mekanisme menggunakan nonce adalah alternatif untuk bukannya membuat backend Anda menghasilkan hash dari konten inline
script
ataustyle
Anda ingin mengizinkan, dan kemudian menentukan hash di daftar sumber yang sesuai di header CSP Anda.Perhatikan bahwa karena browser tidak (tidak dapat) memeriksa bahwa nilai nonce mengirim perubahan antara permintaan halaman, itu mungkin — meskipun sama sekali tidak disarankan — untuk melewati 1 di atas dan tidak membuat backend Anda melakukan apa pun secara dinamis untuk nonce, dalam hal ini Anda bisa saja meletakkan
nonce
atribut dengan nilai statis ke dalam sumber HTML dokumen Anda, dan mengirim header CSP statis dengan nilai nonce yang sama.Tetapi alasan mengapa Anda tidak ingin menggunakan bilangan statis dengan cara itu adalah, itu akan cukup mengalahkan seluruh tujuan penggunaan bilangan bulat itu sama sekali — karena, jika Anda menggunakan bilah statis seperti itu, pada titik itu Anda mungkin hanya menggunakan
unsafe-inline
.sumber
nonce
atribut, jika Anda tidak benar-benar perlu menggunakannya, maka jangan. Ini benar-benar hanya dimaksudkan untuk kasus-kasus di mana karena alasan tertentu Anda tidak dapat (belum) menyingkirkan beberapa skrip inline atau konten gaya dari dokumen tertentu (tetapi harus menghapusnya nanti). Jadi jika beberapa alasan Anda merasa perlu menyimpan skrip inline dan konten gaya, maka saat itu Anda setidaknya dapat menggunakan mekanisme nonce untuk membiarkan browser memverifikasi bahwa mereka OK. Kalau tidak, Anda harus menggunakan CSP sepenuhnya seperti yang dimaksudkan, & tidak mengizinkan skrip inline atau elemen gaya<script type="text/javascript" nonce>
dan<style type="text/css" nonce>