Angular, güvenlik açısından hassas bir niteliğe yapılan bir özellik bağlaması veya öznitelik bağlaması algıladığında bu hatayı görürsünüz. Angular, bu özniteliklerin statik öznitelikler olarak ayarlanmasını gerektirir; böylece değerler element oluşturma zamanında ayarlanır ve ömrü boyunca aynı kalır. Hata mesajı, niteliğin ve öğenin adını içerir.
Bu durum şunlar için geçerlidir:
- Güvenlik modelini kuran
<iframe>öznitelikleri:sandbox,allow,allowFullscreen,referrerPolicy,csp,fetchPriorityvecredentialless. Bunlarsrcveyasrcdocözniteliklerinden önce uygulanmalıdır. - Başka bir öğenin
hrefdeğerini değiştirebilecek SVG animasyon öznitelikleri, örneğin<animate>ve<set>üzerindekiattributeName.
Örneğin, hata bir özellik bağlaması kullanıldığında fırlatılır:
<iframe [sandbox]="'allow-scripts'" src="..."></iframe>
veya bir öznitelik bağlaması olduğunda:
<iframe [attr.sandbox]="'allow-scripts'" src="..."></iframe>
Ayrıca, Direktifin host binding'lerinde benzer bir kalıp kullanıldığında da hata fırlatılır:
@Directive({
selector: 'iframe',
host: {
'[sandbox]': `'allow-scripts'`,
'[attr.sandbox]': `'allow-scripts'`,
},
})
class IframeDirective {}
Hatayı ayıklama
Hata mesajı, güvenli olmayan bağlamalar içeren bir elementin bulunduğu şablonlu bileşenin adını içerir.
Önerilen çözüm, belirtilen öznitelikleri statik olarak kullanmaktır, örneğin:
<iframe sandbox="allow-scripts" src="..."></iframe>
Bu öznitelikler için farklı değerlere ihtiyacınız varsa (çeşitli koşullara bağlı olarak),
uygun <iframe> elementini koşullu olarak oluşturmak için @if veya @switch kontrol akış bloklarını kullanabilirsiniz:
@if (someConditionA) {
<iframe sandbox="allow-scripts" src="..."></iframe>
} @else if (someConditionB) {
<iframe sandbox="allow-forms" src="..."></iframe>
} @else {
<iframe sandbox="allow-popups" src="..."></iframe>
}