Akhir-akhir ini, beberapa situs web seperti Facebook menggunakan Kebijakan Keamanan Konten (CSP) untuk membatasi pemuatan skrip dari "sumber yang tidak dipercaya". Misalnya, ketika meminta konten HTML Facebook (mis. Https://www.facebook.com ), respons HTTP Facebook mencakup header respons berikut:
x-webkit-csp:default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net;
Ini berdampak pada beberapa bookmarklet yang perlu memuat dan mengeksekusi perpustakaan Javascript dari sumber yang tidak dipercaya.
Misalnya, setiap kali saya mencoba menjalankan bookmarklet Show Anchors pada halaman Facebook, eksekusi bookmarklet ini gagal saat mencoba memuat jQuery dari sumber yang tidak terpercaya. Di konsol Pengembang Chrome, ia akan mengatakan:
Refused to load the script 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js' because it violates the following Content Security Policy directive: "script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net".
Saya telah menemukan halaman dokumentasi Chrome tentang topik ini, tetapi itu hanya berlaku untuk ekstensi Chrome .
Saya mencari solusi yang memungkinkan saya
- baik untuk sekali waktu menonaktifkan CSP
- atau daftar putih sumber terpercaya saya secara permanen.
sumber
Jawaban:
Metode yang Didukung oleh Aplikasi Chrome
Gunakan perpustakaan templating
Gunakan perpustakaan yang menawarkan templat yang dikompilasi dan Anda siap. Anda masih dapat menggunakan perpustakaan yang tidak menawarkan prakompilasi, tetapi itu akan membutuhkan beberapa pekerjaan di pihak Anda dan ada batasannya.
Anda perlu menggunakan sandboxing untuk mengisolasi konten apa pun yang ingin Anda lakukan. Kotak pasir mengangkat CSP pada konten yang Anda tentukan.
Konten lokal kotak pasir
Kotak pasir memungkinkan halaman yang ditentukan untuk disajikan dalam kotak pasir, asal yang unik. Halaman-halaman ini kemudian dibebaskan dari Kebijakan Keamanan Konten mereka. Halaman berpasir pasir dapat menggunakan iframe, skrip inline, dan eval () (dan dua yang terakhir dicegah). Itu akan memperbaiki 'tidak aman-sebaris' dan 'tidak aman-eval'.
Akses sumber daya jarak jauh
Anda dapat mengambil sumber daya jarak jauh melalui XMLHttpRequest dan melayani mereka melalui blob :, data :, atau filesystem: URL. Ini harus memperbaiki masalah pengambilan jQuery.
Persyaratan manifes
Untuk dapat melakukan cross-origin
XMLHttpRequests
, Anda harus menambahkan izin untuk host URL jarak jauh.Asal-usul silang
XMLHttpRequest
Ambil URL jarak jauh ke dalam aplikasi dan sajikan kontennya sebagai
blob:
URL.Saya tidak berpikir Anda bisa melakukan semua ini. Untuk memperbaiki
unsafe-eval
danunsafe-inline
merespons tajuk, hanya pemilik skrip yang dapat memperbaiki kode atau jika berada dalam domain publik, Anda dapat memperbaikinya. Semua ini mungkin merupakan perbaikan satu kali.Hacks
Tidak Aman di Jendela
http://wiki.greasespot.net/UnsafeWindow
Injeksi Skrip Konten
http://wiki.greasespot.net/Content_Script_Injection
Namun peretasan memiliki kelemahan karena mereka diketahui menyebabkan lubang keamanan setidaknya yang pertama, pasti.
sumber
Anda dapat mengedit pengaturan ini di tab konten, yang dapat Anda akses langsung dengan mengetik
chrome://settings/content
di bilah alamat. Anda dapat memasukkan daftar putih domain tertentu pada jenis konten tertentu.sumber