Câu trả lời ngắn đã được cung cấp ở đây rồi: sử dụng <div [innerHTML]="yourHtml">
ràng buộc.
Tuy nhiên, phần còn lại của những lời khuyên được đề cập ở đây có thể gây hiểu nhầm. Angular có một cơ chế vệ sinh tích hợp khi bạn liên kết với các thuộc tính như thế. Vì Angular không phải là một thư viện vệ sinh chuyên dụng, nó quá nhiệt tình đối với nội dung đáng ngờ để không gặp bất kỳ rủi ro nào. Ví dụ, nó vệ sinh tất cả nội dung SVG thành chuỗi trống.
Bạn có thể nghe lời khuyên để "vệ sinh" nội dung của mình bằng cách sử dụng DomSanitizer
để đánh dấu nội dung là an toàn với bypassSecurityTrustXXX
các phương pháp. Cũng có những gợi ý sử dụng đường ống để làm điều đó và đường ống đó thường được gọi safeHtml
.
Tất cả điều này là sai lệch bởi vì nó thực sự bỏ qua việc vệ sinh , không vệ sinh nội dung của bạn. Đây có thể là một mối quan tâm bảo mật bởi vì nếu bạn từng làm điều này trên nội dung do người dùng cung cấp hoặc trên bất cứ điều gì bạn không chắc chắn - bạn sẽ tự mở cho mình một cuộc tấn công mã độc.
Nếu Angular loại bỏ thứ bạn cần bằng cách khử trùng tích hợp sẵn - những gì bạn có thể làm thay vì vô hiệu hóa thì đó là ủy thác vệ sinh thực tế cho một thư viện chuyên dụng thực hiện tốt nhiệm vụ đó. Ví dụ: DOMPurify.
Tôi đã tạo một thư viện trình bao bọc cho nó để có thể dễ dàng sử dụng với Angular:
https://github.com/TinkoffCreditSystems/ng-dompurify
Nó cũng có một đường ống để tuyên bố vệ sinh HTML:
<div [innerHtml]="value | dompurify"></div>
Sự khác biệt đối với các đường ống được đề xuất ở đây là nó thực sự làm vệ sinh thông qua DOMPurify và do đó hoạt động cho SVG.
Một điều cần lưu ý là DOMPurify rất tốt cho việc vệ sinh HTML / SVG, nhưng không phải CSS. Vì vậy, bạn có thể cung cấp trình khử trùng CSS của Angular để xử lý CSS:
import {NgModule, ɵ_sanitizeStyle} from '@angular/core';
import {SANITIZE_STYLE} from '@tinkoff/ng-dompurify';
@NgModule({
// ...
providers: [
{
provide: SANITIZE_STYLE,
useValue: ɵ_sanitizeStyle,
},
],
// ...
})
export class AppModule {}
Đó là ɵ
tiền tố nội bộ , nhưng đây là cách nhóm Angular sử dụng nó trên các gói của riêng họ. Thư viện đó cũng hoạt động cho Angular Universal và môi trường đổi tên phía máy chủ.