Hata Ansiklopedisi

Unsafe value used in a resource URL context

<iframe src> veya <link href> gibi harici bir kaynak yükleyen bir niteliğe bir değer bağladığınızda ve bu değer açıkça güvenilir olarak işaretlenmediğinde Angular bu hatayı fırlatır.

Kaynak URL'leri, sıradan URL'lerden farklı ele alınır. Angular düz bir URL'yi temizleyebilir (javascript: şemalarını kaldırmak gibi), ancak keyfi bir kaynak URL'sini güvenli hale getiremez; çünkü bu nitelikler tarayıcının harici içeriği getirip çalıştırmasına neden olur. Bu nedenle Angular, güvenilmeyen değerleri temizlemeye çalışmak yerine reddeder.

Bu denetimi tetikleyen nitelikler şunlardır:

Eleman Nitelik(ler)
<base> href
<embed> src
<frame> src
<iframe> src
<link> href
<object> codebase, data

Hatayı ayıklama

Bu hata, DomSanitizer.sanitize() doğrudan SecurityContext.RESOURCE_URL ve düz bir string ile çağrıldığında da fırlatılabilir:

inject(DomSanitizer).sanitize(SecurityContext.RESOURCE_URL, 'https://example.com'); // NG05201 fırlatır

sanitize(), kaynak URL bağlamında keyfi bir string'i güvenli hale getiremez. Değer tamamen sizin kontrolünüzdeyse bypassSecurityTrustResourceUrl kullanın ya da değeri Angular'ın temizleyebileceği sıradan bir URL niteliğine bağlayın.

Yukarıdaki niteliklerden birine yapılan bir bağlamayı veya doğrudan bir sanitize() çağrısını arayın:

<iframe [src]="userUrl"></iframe>

URL güvenilir ve kontrollü bir kaynaktan geliyorsa, DomSanitizer.bypassSecurityTrustResourceUrl ile güvenli olarak işaretleyin:

import {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';

@Component({
  selector: 'my-app',
})
export class App {
  safeUrl: SafeResourceUrl = inject(DomSanitizer).bypassSecurityTrustResourceUrl(
    'https://example.com/embed',
  );
}
<iframe [src]="safeUrl"></iframe>

bypassSecurityTrustResourceUrl bir temizleyici değil, bir kaçış kapısıdır. Kullanıcıdan gelen URL'leri asla buradan geçirmeyin; bu, bir saldırganın kötü amaçlı betikler dahil olmak üzere keyfi içerik yüklemesine izin verir. Yalnızca değer tamamen sizin kontrolünüzdeyken kullanın.