Des styles comme
<div [style.background-image]="\'url(\' + image + \')\'">Background</div>
<div [style.transform]="rotate(7deg)"
ne sont plus ajoutés
update (2.0.0 final)
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Pipe({name: 'safeHtml'})
export class SafeHtml implements PipeTransform {
constructor(private sanitizer:DomSanitizer){}
transform(html) {
return this.sanitizer.bypassSecurityTrustStyle(html);
// return this.sanitizer.bypassSecurityTrustHtml(html);
// return this.sanitizer.bypassSecurityTrustScript(html);
// return this.sanitizer.bypassSecurityTrustUrl(html);
// return this.sanitizer.bypassSecurityTrustResourceUrl(html);
}
}
Voir aussi https://angular.io/api/platform-browser/DomSanitizer
<div [innerHTML]="someHtml | safeHtml"
update
DomSanitizationService
va être renommé DomSanitizer
dans RC.6
original
Ceci devrait être corrigé dans RC.2
Voir aussi Guide du développeur Angular2 - Sécurité
Désinfection angulaire2 des propriétés CSS et de la liaison de propriétés, comme [innerHTML]=...
et [src]="..."
dans RC.1
Voir aussi https://github.com/angular/angular/issues/8491#issuecomment-217467582
Les valeurs peuvent être marquées comme étant approuvées en utilisant DomSanitizer.bypassSecurityTrustStyle(...)
import {DomSanitizer} from '@angular/platform-browser';
...
constructor(sanitizer: DomSanitizationService) {
this.backgroundImageStyle = sanitizer.bypassSecurityTrustStyle('url(' + this.image + ')');
// for HTML
// this.backgroundImageStyle = sanitizer.bypassSecurityTrustHtml(...);
}
et se liant à cette valeur à la place de la chaîne simple non approuvée.
Cela peut aussi être enveloppé dans un tuyau comme
@Pipe({name: 'safeStyle'})
export class Safe {
constructor(private sanitizer:Sanitizer){}
transform(style) {
return this.sanitizer.bypassSecurityTrustStyle(style);
// return this.sanitizer.bypassSecurityTrustHtml(style);
// return this.sanitizer.bypassSecurityTrustScript(value);
// return this.sanitizer.bypassSecurityTrustUrl(value);
// return this.sanitizer.bypassSecurityTrustResourceUrl(value);
}
}
<div [ngStyle]="someStyle | safeStyle"></div>
avec
someHtml = `<a href="#" onClick="alert(document.cookie);">click to see the awesome</a>`;
fonctionne toujours cependant: - [(c'est en cours)
exemple Plunker (Angular 2.0.0-rc-1)
Voir aussi Problème de suivi de sécurité angulaire 2
et https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
Astuce sur {{...}}
Le contenu désinfecté ne peut pas être lié à l'aide de prop="{{sanitizedContent}}"
parce que {{}}
stringie la valeur avant son affectation, ce qui annule l'assainissement.