Ketika saya mencoba menerapkan aplikasi saya ke perangkat dengan sistem Android di atas 5.0.0 ( Lollipop ), saya terus mendapatkan pesan kesalahan semacam ini:
07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): file: ///android_asset/www/index.html: Line 0: Menolak memuat skrip 'http: // xxxxx' karena melanggar Konten berikut Petunjuk Kebijakan Keamanan: "script-src 'self' 'unsafe-eval' 'unsafe-inline'". 07-03 18: 39: 21.621: I / chromium (9132): [INFO: CONSOLE (0)] "Menolak untuk memuat skrip 'http: // xxx' karena melanggar petunjuk Kebijakan Keamanan Konten berikut:" script- src 'self' 'unsafe-eval' 'unsafe-inline' ".
Namun, jika saya menerapkannya ke perangkat seluler dengan sistem Android 4.4.x ( KitKat ), kebijakan keamanan berfungsi dengan yang default:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
Kemudian saya berpikir, mungkin, saya harus berubah menjadi seperti ini:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">
Pada dasarnya, kedua opsi tersebut tidak berfungsi untuk saya. Bagaimana saya bisa mengatasi masalah ini?
sumber
Jawaban:
Coba ganti tag meta Anda dengan ini di bawah ini:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />
Atau sebagai tambahan atas apa yang Anda miliki, Anda harus menambahkan
http://*
keduanyastyle-src
danscript-src
seperti yang terlihat di atas ditambahkan setelah 'diri'.Jika server Anda menyertakan
Content-Security-Policy
tajuk, tajuk tersebut akan menggantikan meta.sumber
The jawaban diri yang diberikan oleh MagngooSasa melakukan trik, tapi untuk orang lain mencoba memahami jawabannya, berikut adalah beberapa sedikit lebih detail:
Saat mengembangkan aplikasi Cordova dengan Visual Studio, saya mencoba mengimpor file JavaScript jarak jauh [terletak di sini http://Guess.What.com/MyScript.js], tetapi saya memiliki kesalahan yang disebutkan di judul.
Berikut ini meta tag sebelumnya , di file index.html proyek:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
Berikut adalah tag meta yang dikoreksi , untuk mengizinkan impor skrip jarak jauh:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">
Dan tidak ada lagi kesalahan!
sumber
Itu diselesaikan dengan:
script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';
sumber
Bagi siapa pun yang mencari penjelasan lengkap, saya sarankan Anda untuk melihat Kebijakan Keamanan Konten: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .
Serangan XSS didasarkan pada ketidakmampuan browser untuk membedakan kode aplikasi Anda dari kode yang diunduh dari situs web lain. Jadi, Anda harus memasukkan ke dalam daftar putih asal konten yang Anda anggap aman untuk mendownload konten, menggunakan
Content-Security-Policy
header HTTP.Kebijakan ini dijelaskan menggunakan serangkaian arahan kebijakan, yang masing-masing menjelaskan kebijakan untuk jenis sumber daya atau area kebijakan tertentu. Kebijakan Anda harus menyertakan arahan kebijakan default-src, yang merupakan cadangan untuk jenis sumber daya lain jika tidak memiliki kebijakan sendiri.
Jadi, jika Anda memodifikasi tag Anda menjadi:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">
Anda mengatakan bahwa Anda otorisasi eksekusi kode Javacsript (
script-src
) dari asal-usul'self'
,http://onlineerp.solution.quebec
,'unsafe-inline'
,'unsafe-eval'
.Saya kira dua yang pertama benar-benar valid untuk kasus penggunaan Anda, saya agak tidak yakin tentang yang lainnya.
'unsafe-line'
dan'unsafe-eval'
menimbulkan masalah keamanan, jadi Anda tidak boleh menggunakannya kecuali Anda memiliki kebutuhan yang sangat spesifik:sumber
String izin penuh
Jawaban sebelumnya tidak menyelesaikan masalah saya, karena tidak menyertakan
blob: data: gap:
kata kunci pada saat yang sama; jadi berikut adalah string yang melakukan:<meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;">
Peringatan: Ini mengekspos dokumen ke banyak eksploitasi. Pastikan untuk mencegah pengguna menjalankan kode di konsol atau berada di lingkungan tertutup seperti aplikasi Cordova .
sumber
Kami menggunakan ini:
<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; style-src 'self' http://* https://* 'unsafe-inline'; script-src 'self' http://* https://* 'unsafe-inline' 'unsafe-eval'">
sumber
Untuk menguraikan lebih lanjut tentang ini, menambahkan
script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';
ke tag meta seperti ini,
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' https://somedomain.com/ 'unsafe-inline' 'unsafe-eval'; media-src *">
memperbaiki kesalahan tersebut.
sumber
Menambahkan tag meta untuk mengabaikan kebijakan ini tidak membantu kami, karena server web kami memasukkan
Content-Security-Policy
tajuk dalam tanggapan tersebut.Dalam kasus kami, kami menggunakan Ngnix sebagai server web untuk aplikasi berbasis Java Tomcat 9. Dari web server, itu mengarahkan browser untuk tidak mengizinkan
inline scripts
, jadi untuk pengujian sementara kami telah mematikanContent-Security-Policy
dengan berkomentar.Cara mematikannya di ngnix
Secara default, file ngnix ssl.conf akan menambahkan header ke respon ini:
#> grep 'Content-Security' -ir /etc/nginx/global/ssl.conf add_header Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; script-src 'self'; img-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self';";
Jika Anda hanya mengomentari baris ini dan memulai ulang ngnix, seharusnya tidak menambahkan header ke respons.
sumber
Kemungkinan alasan mengapa Anda mendapatkan kesalahan ini kemungkinan karena Anda telah menambahkan folder / build ke file .gitignore Anda atau secara umum belum memeriksanya ke Git.
Jadi ketika Anda Git mendorong master Heroku , folder build yang Anda referensikan tidak didorong ke Heroku. Dan itulah mengapa ini menunjukkan kesalahan ini.
Itulah alasannya berfungsi dengan baik secara lokal, tetapi tidak saat Anda menerapkannya ke Heroku.
sumber