Тут вже була надана коротка відповідь: використовувати <div [innerHTML]="yourHtml">
прив’язку.
Однак решта порад, згаданих тут, можуть ввести в оману. Кутовий має вбудований механізм дезінфекції, коли ви прив'язуєтесь до таких властивостей. Оскільки Angular не є спеціалізованою санітарною бібліотекою, надто піклується щодо підозрілого вмісту, щоб не ризикувати. Наприклад, він дезінфікує весь вміст SVG у порожній рядок.
Ви можете почути поради щодо "санітарії" вашого вмісту, використовуючи методи DomSanitizer
для позначення вмісту безпечним bypassSecurityTrustXXX
. Також є пропозиції використовувати для цього трубу, і цю трубу часто називають safeHtml
.
Все це вводить в оману, оскільки воно фактично обходить санітарну обробку , а не санітизує ваш вміст. Це може викликати занепокоєння щодо безпеки, оскільки якщо ви коли-небудь робите це на вмісті, що надається користувачем, або на чомусь, в чому ви не впевнені - ви відкриваєтесь для атак зловмисного коду.
Якщо Angular видаляє щось, що вам потрібно завдяки його вбудованій санітарній обробці - те, що ви можете зробити замість того, щоб вимкнути це, делегувати фактичну санітарну обробку до спеціальної бібліотеки, яка добре підходить для цього завдання. Наприклад - DOMPurify.
Я створив для нього бібліотеку обгортки, щоб її можна було легко використовувати з Angular:
https://github.com/TinkoffCreditSystems/ng-dompurify
У нього також є можливість декларативно очистити HTML:
<div [innerHtml]="value | dompurify"></div>
Відмінність труб, запропонованих тут, полягає в тому, що він фактично робить санітарну обробку через DOMPurify і, отже, працює для SVG.
Варто пам’ятати, що DOMPurify чудово підходить для очищення HTML / SVG, але не для CSS. Таким чином, ви можете запропонувати CSular для дезінфекції CSS для обробки CSS:
import {NgModule, ɵ_sanitizeStyle} from '@angular/core';
import {SANITIZE_STYLE} from '@tinkoff/ng-dompurify';
@NgModule({
// ...
providers: [
{
provide: SANITIZE_STYLE,
useValue: ɵ_sanitizeStyle,
},
],
// ...
})
export class AppModule {}
Це внутрішній - hense ɵ
префікс, але саме так Angular команда використовує його у своїх власних пакетах. Ця бібліотека також працює в середовищі Angular Universal і середовищі ренерінгу на стороні сервера.