Handlebars.js: Manifes ekstensi Chrome v2 membatasi penggunaan eval

Dibuat pada 25 Feb 2013  ·  5Komentar  ·  Sumber: handlebars-lang/handlebars.js

Handlebars tidak akan berfungsi di ekstensi Chrome dengan manifest_version: 2 karena kebijakan keamanan baru yang membatasi penggunaan sintaks eval dan eval-like.

Uncaught EvalError: Menolak untuk mengevaluasi string sebagai JavaScript karena 'unsafe-eval' bukan sumber skrip yang diizinkan dalam arahan Kebijakan Keamanan Konten berikut: "script-src 'self' chrome-extension-resource:".
handlebars.js:1402
JavaScriptCompiler.createFunctionContext handlebars.js:1402
JavaScriptCompiler.compile handlebars.js:1320
kompilasi handlebars.js:2105
(fungsi anonim) handlebars.js:2112
(fungsi anonim) panel.js:14 <--- skrip saya bernama Handlebars.compile()

Komentar yang paling membantu

Itu pada dasarnya mengalahkan inti penggunaan CSP untuk mencegah injeksi.

Semua 5 komentar

Ini mewarisi desain kerangka. Jika Anda menjalankan di lingkungan yang tidak dapat Anda gunakan javascript yang dihasilkan secara dinamis, Anda perlu mengkompilasi template Anda terlebih dahulu dan menyertakan output yang dihasilkan dengan package.json Anda.

Ini mengganggu saya. Berikut kutipan dari halaman Google:

"Namun, kami menyadari bahwa berbagai pustaka menggunakan eval() dan konstruksi mirip eval seperti new Function() untuk optimalisasi kinerja dan kemudahan ekspresi. Pustaka templating sangat rentan terhadap gaya implementasi ini. _Sementara beberapa (seperti Angular .js) mendukung CSP di luar kotak,_ banyak kerangka kerja populer yang belum diperbarui ke mekanisme yang kompatibel dengan dunia eval-less ekstensi. Oleh karena itu, menghapus dukungan untuk fungsionalitas itu terbukti lebih bermasalah daripada yang diharapkan bagi pengembang."

Jadi, beberapa sistem template dapat mengatur agar sesuai dengan CSP, tetapi tidak untuk Handlebars? Jadi, sekarang saya telah menggunakan Handlebars di proyek saya, saya terjebak dengan 2 pilihan untuk mendapatkan aplikasi saya yang sesuai dengan CSP:

1) Robek Setang
2) Pra-kompilasi semua template saya.

Mengingat sifat dinamis dari template saya, pra-kompilasi bukanlah pilihan. Jadi, sekarang saya harus mencopot setang karena cacat ini sudah tertutup.

Apakah tidak mungkin mengikuti panduan CSP di sini?

"Anda dapat mengizinkannya dengan menambahkan 'eval tidak aman' ke daftar sumber Anda"

Itu pada dasarnya mengalahkan inti penggunaan CSP untuk mencegah injeksi.

FWIW, Cloudant (berdasarkan Apache CouchDB) baru-baru ini mengubah pemrosesan skrip dalam basis data mereka untuk juga mencegah eval() dan new Function() https://console.bluemix.net/docs/services/Cloudant/release_info /deprecations.html#disabled -javascript-constructors

Prakompilasi template ke dalam JS berfungsi untuk beberapa skenario, tetapi tidak untuk semuanya. Alangkah baiknya jika ada opsi lain, sehingga Handlebars.js bisa digunakan lebih banyak tempat.

Tapi... mungkin itu hanya angan-angan. :senyum:

Apakah halaman ini membantu?
0 / 5 - 0 peringkat