Dipublikasikan: 17 November 2025
Mulai Chrome 141, Anda dapat bergabung dalam uji coba origin untuk menguji fitur Kebijakan Keamanan Konten (CSP) baru yang diperkenalkan Chrome. Fitur ini membantu situs melindungi diri dari XSS dengan mengizinkan sumber JavaScript yang diketahui dengan lebih baik. Membuat daftar yang diizinkan untuk JavaScript yang diketahui, dan memblokir semua sumber lainnya, adalah cara efektif untuk mencegah XSS. JavaScript yang disisipkan penyerang tidak akan ada dalam daftar yang diizinkan, sehingga diblokir.
Tanpa fitur ini, sulit untuk memiliki CSP "ketat" yang mengizinkan semua sumber JavaScript tanpa memiliki mekanisme komunikasi nonce antara host skrip dan situs, atau mengetahui hash lengkap skrip sebelumnya. Kedua metode ini sulit di-deploy jika skrip sering berubah dan dihosting oleh pihak ketiga terpisah yang tepercaya. Selain itu, jika ada skrip yang perlu menggunakan eval, CSP saat ini mengharuskan Anda memasukkan eval ke daftar yang diizinkan untuk semua skrip, sehingga membuatnya jauh lebih lemah.
Kami berupaya mengatasi kesenjangan ini dengan menyediakan mekanisme yang lebih kuat untuk memasukkan skrip ke daftar yang diizinkan berdasarkan URL di script-src, dan mekanisme untuk memasukkan panggilan ke eval ke daftar yang diizinkan. Anda akan dapat menggunakan mekanisme hash yang ada di
script-src untuk memasukkan URL skrip tertentu ke dalam daftar yang diizinkan, dan JavaScript yang diteruskan ke
eval (dan fungsi seperti eval lainnya). Meskipun daftar yang diizinkan berbasis URL mungkin tidak seketat CSP berbasis integritas, mekanisme ini akan menjadi peningkatan yang signifikan pada daftar yang diizinkan nama host yang ada.
Kami yakin bahwa hal ini memberikan kebijakan CSP yang lebih mudah di-deploy dan tetap secara efektif memitigasi XSS dengan memblokir skrip inline dan eval yang tidak diizinkan. Fitur baru ini dirancang dan diterapkan dengan cermat untuk memungkinkan situs menetapkan kebijakan yang memberikan keamanan yang lebih baik di browser yang mendukung fungsi baru, tanpa menyebabkan kerusakan atau regresi keamanan di browser yang tidak mendukungnya, tanpa harus melakukan deteksi agen pengguna.
Kasus penggunaan
Memasukkan URL tertentu ke daftar yang diizinkan untuk digunakan dengan script-src
Situs yang ingin memasukkan skrip tertentu ke daftar yang diizinkan untuk digunakan dengan script-src saat ini memiliki dua opsi: memasukkan konten skrip ke daftar yang diizinkan melalui integritas subresource (SRI), atau menggunakan host-source untuk memasukkan nama host ke daftar yang diizinkan. SRI sering kali tidak praktis untuk
skrip yang sering berubah (misalnya, skrip analisis). Menentukan
host-source akan diabaikan jika strict-dynamic juga ditetapkan, dan bukan merupakan
perlindungan yang komprehensif, karena tidak menyertakan parameter URL. Perubahan ini akan mengizinkan skrip yang masuk daftar yang diizinkan menggunakan hash URL (lengkap) mereka, yang mendukung skrip dinamis dan konfigurasi yang menggunakan strict-dynamic.
Mengizinkan skrip tertentu untuk digunakan dengan fungsi eval atau fungsi mirip eval
Beberapa situs memerlukan penggunaan fungsi eval atau fungsi mirip eval (meneruskan kode sebagai
literal string di setTimeout, setInterval, dan setImmediate). Untuk situs ini,
satu-satunya opsi CSP yang tersedia bagi mereka adalah unsafe-eval, yang memungkinkan semua panggilan
ke eval. Kami menambahkan mekanisme untuk mengizinkan input tertentu ke eval. Mekanisme baru ini memungkinkan daftar yang diizinkan secara sempit untuk skrip tertentu yang diperlukan dengan melakukan hashing langsung pada konten skrip, bukan dipaksa untuk memberikan CSP unsafe-eval yang terlalu luas.
Mulai
Untuk mencoba dukungan hashing script dan eval, bergabunglah dengan
Hash URL dan eval dalam uji coba origin CSP script-src,
yang berjalan dari Chrome 141 hingga 144.
Menambahkan hash ke script-src
URL diizinkan dengan menambahkan nilai ke perintah CSP script-src dalam bentuk url-<hash-algorithm>-<script-url-hash>. Hal ini akan mengizinkan konten apa pun yang ditayangkan oleh URL tersebut, terlepas dari kontennya, untuk dieksekusi. Hash hanya boleh menyertakan URL awal (URL yang disertakan di halaman), bukan URL yang dialihkan oleh URL tersebut. URL absolut dan relatif didukung.
Misalnya, header CSP berikut akan memasukkan skrip yang ditayangkan di https://example.com/example.js ke dalam daftar yang diizinkan:
Content-Security-Policy: script-src 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=';
dengan 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=' adalah hash sha256
dari 'https://example.com/example.js'.
Skrip yang dievaluasi melalui eval atau new Function dapat dimasukkan ke daftar yang diizinkan dengan menyertakan eval-<hash-algorithm>-<script-contents-hash> ke src skrip. Misalnya, header CSP berikut akan mengizinkan string
alert("hello world") diteruskan ke eval():
Content-Security-Policy: script-src 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=';
dengan 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=' adalah hash
sha256 dari alert("hello world").
Untuk membantu memicu adopsi, saat situs memilih untuk mengikuti uji coba origin, hash untuk URL dan eval akan dicetak ke konsol DevTools dan disertakan dalam laporan CSP. Artinya, kebijakan report-only yang ketat dapat digunakan untuk menghitung semua hash yang diperlukan untuk memasukkan ke daftar yang diizinkan.
Mempertahankan kompatibilitas mundur
Untuk mengizinkan deployment kebijakan ini sebelum semua browser menambahkan dukungan, hash URL dapat dicantumkan setelah daftar yang diizinkan berbasis host. Browser yang memahami jenis hash baru akan mengabaikan daftar yang diizinkan berbasis host sebelumnya, sementara browser yang tidak memahami jenis hash baru akan tetap menerapkan daftar yang diizinkan berbasis host, sehingga situs dapat menyetel keduanya, menggunakan kebijakan yang lebih ketat di browser yang mendukungnya, tanpa harus berisiko kerusakan di browser yang tidak mendukungnya, seperti yang ditunjukkan dalam contoh berikut.
Content-Security-Policy: script-src 'https:' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
Kami juga telah memperkenalkan strict-dynamic-url, yang setara dengan strict-dynamic yang hanya berlaku saat hash URL ditetapkan. Karena strict-dynamic menyebabkan daftar yang diizinkan berbasis host diabaikan, situs yang ingin memasukkan hash tertentu ke dalam daftar yang diizinkan dan menerapkan strict-dynamic dapat menggunakan kebijakan seperti:
Content-Security-Policy: https: 'strict-dynamic-url' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
Dalam contoh ini, browser yang belum mendukung hash hanya akan menerapkan
https:. unsafe-eval juga akan diabaikan oleh browser yang mendukung saat hash eval ada. Misalnya, kebijakan berikut akan dievaluasi sebagai
unsafe-eval. Hal ini memungkinkan semua penggunaan eval() di browser yang belum
mendukung hash eval, sekaligus hanya mengizinkan eval() dari alert("hello world")
di antara browser yang mendukung hash eval.
Content-Security-Policy: script-src "unsafe-eval" "'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0='"
Berikan masukan
Kami tertarik dengan masukan dari developer tentang ekstensi ini ke
script-src. Posting komentar apa pun sebagai masalah di penjelasan di GitHub.