Saya mencoba menggunakan $sanitize
penyedia danng-bind-htm-unsafe
arahan untuk memungkinkan pengontrol saya untuk menyuntikkan HTML ke dalam DIV.
Namun, saya tidak bisa membuatnya bekerja.
<div ng-bind-html-unsafe="{{preview_data.preview.embed.html}}"></div>
Saya menemukan bahwa itu karena dihapus dari AngularJS (terima kasih).
Tapi tanpa ng-bind-html-unsafe
, saya mendapatkan kesalahan ini:
Jawaban:
ngSanitize
modul padaapp
mis Anda :var app = angular.module('myApp', ['ngSanitize']);
ng-bind-html
aslihtml
. Tidak perlu melakukan hal lain di controller Anda. Penguraian dan konversi secara otomatis dilakukan olehngBindHtml
arahan. (BacaHow does it work
bagian ini: $ sce ). Jadi, dalam kasus Anda<div ng-bind-html="preview_data.preview.embed.html"></div>
akan melakukan pekerjaan.sumber
Alih-alih mendeklarasikan fungsi dalam cakupan Anda, seperti yang disarankan oleh Alex, Anda dapat mengubahnya menjadi filter sederhana:
Maka Anda dapat menggunakannya seperti ini:
Dan di sini adalah contoh kerja: http://jsfiddle.net/leeroy/6j4Lg/1/
sumber
<td ng-bind-html="representative.primary | to_trusted"></td>
Anda mengindikasikan bahwa Anda menggunakan Angular 1.2.0 ... sebagai salah satu komentar lain yang ditunjukkan,
ng-bind-html-unsafe
telah usang.Sebagai gantinya, Anda ingin melakukan sesuatu seperti ini:
Di controller Anda, menyuntikkan
$sce
layanan, dan tandai HTML sebagai "tepercaya":Perhatikan bahwa Anda ingin menggunakan 1.2.0-rc3 atau yang lebih baru. (Mereka memperbaiki bug di rc3 yang mencegah "pengamat" bekerja dengan baik pada HTML tepercaya.)
sumber
myApp.controller('myCtrl', ['$scope', '$sce', function($scope, $sce) {
ngSanitize
bawah ini ( stackoverflow.com/a/25679834/22227 ) untuk alternatif, perbaikan yang lebih aman.trustAsHtml
melakukan apa yang tertulis, itu mempercayai setiap kode yang masuk html, yang dapat mengakibatkan Cross-Site Scripting (XSS) seranganBagi saya, solusi paling sederhana dan paling fleksibel adalah:
Dan tambahkan fungsi ke controller Anda:
Jangan lupa tambahkan
$sce
inisialisasi pengontrol Anda.sumber
Solusi terbaik untuk ini menurut saya adalah ini:
Buat filter khusus yang dapat berupa file common.module.js misalnya - digunakan di seluruh aplikasi Anda:
Pemakaian:
Sekarang - saya tidak mengerti mengapa arahan
ng-bind-html
tidaktrustAsHtml
sebagai bagian dari fungsinya - tampaknya agak bodoh bagi saya bahwa itu tidakNgomong-ngomong - itulah cara saya melakukannya - 67% dari waktu, itu berhasil setiap saat.
sumber
Anda dapat membuat pengikatan html sederhana yang tidak aman sendiri, tentu saja jika Anda menggunakan input pengguna, itu bisa menjadi risiko keamanan.
sumber
$sce.trustAsHtml
?Anda tidak perlu menggunakan {{}} di dalam ng-bind-html-unsafe:
Berikut ini contohnya: http://plnkr.co/edit/R7JmGIo4xcJoBc1v4iki?p=preview
Operator {{}} pada dasarnya hanyalah singkatan untuk ng-bind, jadi apa yang Anda coba sama dengan penjilidan di dalam penjilidan, yang tidak berfungsi.
sumber
{{}}
operator adalah menyebabkan masalah saya dengan mengikat gagal, terima kasih untuk petunjuk yang!Saya punya masalah serupa. Masih tidak bisa mendapatkan konten dari file penurunan harga saya yang diinangi di github.
Setelah menyiapkan daftar putih (dengan domain github ditambahkan) ke $ sceDelegateProvider di app.js itu berfungsi seperti pesona.
Deskripsi: Menggunakan daftar putih alih-alih membungkus sebagai tepercaya jika Anda memuat konten dari url yang berbeda.
Documents: $ sceDelegateProvider dan ngInclude (untuk mengambil, mengkompilasi, dan memasukkan fragmen HTML eksternal)
sumber
Escaping Kontekstual yang Ketat dapat dinonaktifkan sepenuhnya, memungkinkan Anda untuk menyuntikkan html menggunakan
ng-html-bind
. Ini adalah opsi yang tidak aman, tetapi sangat membantu saat pengujian.Contoh dari dokumentasi AngularJS pada
$sce
:Melampirkan bagian konfigurasi di atas ke aplikasi Anda akan memungkinkan Anda menyuntikkan html ke dalamnya
ng-html-bind
, tetapi seperti yang dinyatakan oleh dokumen:sumber
Anda dapat menggunakan filter seperti ini
pemakaian
dapat digunakan untuk jenis sumber daya lainnya, misalnya tautan sumber untuk iframe dan jenis lain yang dideklarasikan di sini
sumber