javascript / intermediate
Snippet
Sicheres Umgehen von vertrauenswürdigen Ressourcen-URLs mit dem Angular DomSanitizer
Angular stuft Werte bei der Bindung an sicherheitskritische DOM-Kontexte wie iframe-Quell-URLs standardmäßig als nicht vertrauenswürdig ein, um vor Cross-Site-Scripting (XSS) zu schützen. Wenn dynamisch zusammengestellte URLs in eingebettete Frames geladen werden, können Parameter bereinigt und der String über den DomSanitizer-Dienst explizit als SafeResourceUrl deklariert werden. Dadurch weiß der Angular-Template-Compiler, dass die Ressource sicher gerendert werden darf.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { Component, inject } from '@angular/core';import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';@Component({selector: 'app-video-frame',template: `<iframe [src]="trustedUrl" width="560" height="315"></iframe>`})export class VideoFrameComponent {private readonly sanitizer = inject(DomSanitizer);public trustedUrl: SafeResourceUrl | null = null;public setVideoSource(rawVideoId: string): void {const sanitizedId = encodeURIComponent(rawVideoId.trim());const targetUrl = `https://www.youtube-nocookie.com/embed/${sanitizedId}`;this.trustedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(targetUrl);}}
angular
Erklärung
1
private readonly sanitizer = inject(DomSanitizer);
Injiziert die DomSanitizer-Abhängigkeit über die inject-Funktion in die Komponenteninstanz.
2
public trustedUrl: SafeResourceUrl | null = null;
Deklariert die Eigenschaft mit dem Typ SafeResourceUrl, wodurch Sicherheitsfehler beim Template-Binding verhindert werden.
3
const sanitizedId = encodeURIComponent(rawVideoId.trim());
Bereinigt dynamische Eingabeparameter, um Manipulationen der URL vor der Erstellung auszuschließen.
4
this.trustedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(targetUrl);
Weist Angular explizit an, diese spezifische URL als eingebettete Ressource als vertrauenswürdig einzustufen.