Jawaban singkat sudah disediakan di sini: gunakan <div [innerHTML]="yourHtml">
penjilidan.
Namun saran lain yang disebutkan di sini mungkin menyesatkan. Angular memiliki mekanisme sanitasi bawaan ketika Anda mengikat properti seperti itu. Karena Angular bukan perpustakaan sanitasi yang berdedikasi, itu terlalu bersemangat untuk konten yang mencurigakan untuk tidak mengambil risiko. Misalnya, itu membersihkan semua konten SVG menjadi string kosong.
Anda mungkin mendengar saran untuk "membersihkan" konten Anda dengan menggunakan DomSanitizer
untuk menandai konten sebagai aman dengan bypassSecurityTrustXXX
metode. Ada juga saran untuk menggunakan pipa untuk melakukan itu dan pipa itu sering disebut safeHtml
.
Semua ini menyesatkan karena sebenarnya memotong sanitasi , bukan membersihkan konten Anda. Ini bisa menjadi masalah keamanan karena jika Anda melakukan ini pada konten yang disediakan pengguna atau pada apa pun yang Anda tidak yakin - Anda membuka diri untuk serangan kode berbahaya.
Jika Angular menghapus sesuatu yang Anda butuhkan dengan sanitasi bawaan - yang dapat Anda lakukan alih-alih menonaktifkannya adalah mendelegasikan sanitasi aktual ke perpustakaan khusus yang ahli dalam tugas itu. Misalnya - DOMPurify.
Saya telah membuat perpustakaan pembungkus untuk itu sehingga dapat dengan mudah digunakan dengan Angular:
https://github.com/TinkoffCreditSystems/ng-dompurify
Ini juga memiliki pipa untuk membersihkan HTML secara deklaratif:
<div [innerHtml]="value | dompurify"></div>
Perbedaan dengan pipa yang disarankan di sini adalah bahwa itu benar-benar melakukan sanitasi melalui DOMPurify dan karenanya bekerja untuk SVG.
Satu hal yang perlu diingat adalah DOMPurify sangat bagus untuk membersihkan HTML / SVG, tetapi tidak untuk CSS. Jadi, Anda dapat menyediakan pembersih CSS Angular untuk menangani CSS:
import {NgModule, ɵ_sanitizeStyle} from '@angular/core';
import {SANITIZE_STYLE} from '@tinkoff/ng-dompurify';
@NgModule({
// ...
providers: [
{
provide: SANITIZE_STYLE,
useValue: ɵ_sanitizeStyle,
},
],
// ...
})
export class AppModule {}
Ini adalah ɵ
awalan internal-padat , tetapi ini adalah cara tim Angular menggunakannya di paket mereka sendiri juga. Perpustakaan itu juga berfungsi untuk Angular Universal dan lingkungan sisi server renedring.