La risposta breve è stata fornita qui già: utilizzare <div [innerHTML]="yourHtml">
associazione.
Tuttavia, il resto dei consigli menzionati qui potrebbe essere fuorviante. Angular ha un meccanismo di sanificazione integrato quando ti colleghi a proprietà del genere. Poiché Angular non è una libreria dedicata alla sanificazione, è troppo zelante verso contenuti sospetti non correre alcun rischio. Ad esempio, disinfetta tutto il contenuto SVG in una stringa vuota.
Potresti ricevere consigli per "disinfettare" i tuoi contenuti usando DomSanitizer
per contrassegnare i contenuti come sicuri con i bypassSecurityTrustXXX
metodi. Ci sono anche suggerimenti per usare pipe per farlo e quel pipe viene spesso chiamatosafeHtml
.
Tutto ciò è fuorviante perché aggira effettivamente la sanificazione , non la sanificazione dei tuoi contenuti. Questo potrebbe essere un problema di sicurezza perché se lo fai mai sul contenuto fornito dall'utente o su qualcosa di cui non sei sicuro, ti apri per attacchi di codice dannoso.
Se Angular rimuove qualcosa di cui hai bisogno dalla sua sanificazione integrata, quello che puoi fare invece di disabilitarlo è delegare la sanificazione effettiva a una libreria dedicata che è brava in tale compito. Ad esempio - DOMPurify.
Ho creato una libreria wrapper per poterlo facilmente usare con Angular:
https://github.com/TinkoffCreditSystems/ng-dompurify
Ha anche una pipe per disinfettare in modo dichiarativo HTML:
<div [innerHtml]="value | dompurify"></div>
La differenza rispetto alle tubazioni suggerite qui è che effettivamente esegue la sanificazione tramite DOMPurify e quindi funziona per SVG.
Una cosa da tenere a mente è che DOMPurify è ottimo per disinfettare HTML / SVG, ma non CSS. Quindi puoi fornire il disinfettante CSS di Angular per gestire i CSS:
import {NgModule, ɵ_sanitizeStyle} from '@angular/core';
import {SANITIZE_STYLE} from '@tinkoff/ng-dompurify';
@NgModule({
// ...
providers: [
{
provide: SANITIZE_STYLE,
useValue: ɵ_sanitizeStyle,
},
],
// ...
})
export class AppModule {}
È un ɵ
prefisso interno, ma questo è il modo in cui il team Angular lo usa anche nei propri pacchetti. Tale libreria funziona anche per l'ambiente angolare universale e l'ambiente lato server.