Kısa cevap zaten burada verilmiştir: <div [innerHTML]="yourHtml">
bağlama kullanın .
Ancak burada belirtilen diğer öneriler yanıltıcı olabilir. Angular, bu gibi özelliklere bağlandığınızda yerleşik bir dezenfeksiyon mekanizmasına sahiptir. Angular adanmış bir hijyen kütüphanesi olmadığından, şüpheli içeriğe herhangi bir risk almama konusunda aşırı heveslidir. Örneğin, tüm SVG içeriğini boş dizeye temizler.
DomSanitizer
İçeriği bypassSecurityTrustXXX
yöntemlerle güvenli olarak işaretlemek için kullanarak içeriğinizi "sterilize" etmek için tavsiyeler duyabilirsiniz . Bunu yapmak için boru kullanma önerileri de vardır ve bu boruya sıklıkla denir safeHtml
.
Tüm bunlar yanıltıcıdır, çünkü aslında içeriğinizi dezenfekte etmek yerine sanitizasyonu atlar . Bu bir güvenlik sorunu olabilir, çünkü bunu kullanıcı tarafından sağlanan içerikte veya emin olmadığınız herhangi bir şeyde yaparsanız - kendinizi kötü amaçlı kod saldırılarına açarsınız.
Angular, dahili dezenfeksiyonu ile ihtiyacınız olan bir şeyi kaldırırsa - devre dışı bırakmak yerine yapabileceğiniz şey, gerçek dezenfeksiyonunu bu görevde iyi olan özel bir kütüphaneye devretmektir. Örneğin - DOMPurify.
Bunun için bir paketleyici kitaplığı yaptım, böylece Angular ile kolayca kullanılabilir:
https://github.com/TinkoffCreditSystems/ng-dompurify
Ayrıca, HTML'yi bildirerek sterilize etmek için bir borusu vardır:
<div [innerHtml]="value | dompurify"></div>
Burada önerilen borular arasındaki fark, aslında DOMPurify aracılığıyla sanitizasyon yapması ve bu nedenle SVG için çalışmasıdır.
Akılda tutulması gereken bir şey DOMPurify, HTML / SVG'yi sterilize etmek için harika, ancak CSS değil. Böylece, CSS'yi işlemek için Angular'ın CSS dezenfektanını sağlayabilirsiniz:
import {NgModule, ɵ_sanitizeStyle} from '@angular/core';
import {SANITIZE_STYLE} from '@tinkoff/ng-dompurify';
@NgModule({
// ...
providers: [
{
provide: SANITIZE_STYLE,
useValue: ɵ_sanitizeStyle,
},
],
// ...
})
export class AppModule {}
Bu iç hense ɵ
önekidir, ancak Angular ekibi bunu kendi paketlerinde de böyle kullanır. Bu kütüphane aynı zamanda Angular Universal ve sunucu tarafı yenileme ortamı için de kullanılabilir.