2
我正在爲SafePipe編寫測試。該方法使用bypassSecurityTrustResourceUrl()
。我搜索了可用的解決方案並嘗試了它們,但不幸的是,它並沒有幫助我。錯誤是Angular2 - 預期安全值必須使用[property] = binding
預期的SafeValue必須使用[property] = binding:Cross(見http://g.co/ng/security#xss)爲'跨站點請求'。
我在這裏做什麼?
import {Pipe, PipeTransform} from "@angular/core";
import {DomSanitizer} from "@angular/platform-browser";
@Pipe({name: 'safe'})
export class SafePipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {
}
public transform(url: string): any {
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
}
測試是:
import {SafePipe} from './safe.pipe';
import {DomSanitizer} from "@angular/platform-browser";
import {DomSanitizerImpl} from "@angular/platform-browse/src/security/dom_sanitization_service";
fdescribe('SafePipe',() => {
let pipe: SafePipe;
let sanitizer: DomSanitizer = new DomSanitizerImpl();
beforeEach(() => {
pipe = new SafePipe(sanitizer);
});
it('should transform',() => {
expect(pipe.transform("Cross <script>alert('Hello')</script>")).toBe("Cross alert('Hello')");
});
});
它的工作原理,謝謝。但它應該從文本中移除'script'標籤。 [看到這裏 - Angular2安全](https://angular.io/guide/security#sanitization-example) – user3520629
'Angular認爲這個值是不安全的,並自動清理它,這就消除了