FlawOpen

flawopen.com/Keamanan Angular/Angular

Perlindungan XSS Angular: default aman dan API bypass

Halaman referensi
Jawaban singkat

Angular menganggap nilai dalam template binding tidak tepercaya: interpolasi meng-escape teks, sedangkan binding HTML dan URL disanitasi sesuai konteks. Batas berbahaya muncul saat kepercayaan diberikan secara eksplisit: bypassSecurityTrust* meminta Angular melewati sanitasi normal untuk nilai itu. Gunakan hanya setelah nilai divalidasi dan dibentuk untuk konteks keamanan persis tempat nilai tersebut dipakai.

RISKY — the escape hatch
this.safeHtml = this.sanitizer
  .bypassSecurityTrustHtml(comment);
// <div [innerHTML]="safeHtml"></div>
LEBIH AMAN — pertahankan input tak tepercaya sebagai teks
<div>{{ comment }}</div>
// interpolasi meng-escape markup sebagai teks

Apa yang disanitasi Angular — dan yang tidak bisa

Angular meng-escape teks interpolasi dan menyanitasi nilai tak tepercaya dalam konteks HTML serta URL. Misalnya, [innerHTML] menghapus markup berbahaya sambil mempertahankan HTML yang aman; interpolasi biasa tidak menafsirkan markup. Resource URL (seperti sumber iframe yang memuat konten executable) tidak dapat disanitasi secara umum karena dapat menunjuk ke kode sembarang. Jangan berikan nilai yang dikendalikan penyerang kepada bypassSecurityTrustHtml, bypassSecurityTrustUrl, bypassSecurityTrustResourceUrl, atau API bypass terkait: API itu menyatakan nilai aman untuk konteks tertentu dan melewati sanitasi. Untuk embed yang sah, bentuk URL dari origin tetap dan ID tervalidasi tepat sebelum menandainya tepercaya.

Audit API bypass dan sink DOM

grep -rn "bypassSecurityTrust" --include="*.ts" .

Pertanyaan umum

Pertahanan berlapis dengan CSP dan Trusted Types

Gunakan Content Security Policy (CSP) dan wajibkan Trusted Types sebagai pertahanan berlapis bersama binding Angular yang aman. Angular memerlukan kebijakan Trusted Types angular#unsafe-bypass saat aplikasi memanggil DomSanitizer.bypassSecurityTrust*. Sebaiknya hapus pemanggilan tersebut; jika diperlukan, inventarisasi setiap lokasi pemanggilan dan percayai hanya nilai yang divalidasi untuk konteksnya secara tepat.

Apakah Angular menyanitasi semua cara menulis ke DOM?

Tidak. Template binding dilindungi framework, tetapi API DOM langsung, ElementRef, dan library DOM pihak ketiga dapat melewati perlindungan itu. Utamakan template binding, audit sink tersebut secara terpisah, dan jangan tandai input sebagai tepercaya tanpa validasi untuk konteks keamanan yang tepat.

Referensi

Lihat juga Cross-Site Scripting (XSS, CWE-79): cara kerja dan cara mencegahnya di setiap bahasa — flawopen.com XSS akibat MIME sniffing: Content-Type dan nosniff CSP dan output escaping: apakah keduanya diperlukan? Apakah dangerouslySetInnerHTML di React aman? Apakah DOMPurify cukup untuk mengamankan innerHTML? Apakah rendering Markdown aman dari XSS? Apakah Svelte aman dari XSS secara default?