반응형
안전값은 DomSanitizer를 사용하여 우회 보안 후 [binding]=binding을 사용해야 합니다.
<!--HTML CODE-->
<p #mass_timings></p>
//Controller code
@ViewChild('mass_timings') mass_timings: ElementRef;
constructor(private domSanitizer:DomSanitizer)
getInnerHTMLValue(){
this.mass_timings.nativeElement.innerHTML =
this.domSanitizer.bypassSecurityTrustHtml(this.parishDetail.mass_timings);
}
그러나 mass_timings가 표시하는 출력에는 다음과 같은 텍스트가 포함됩니다.-
안전 값은 [safe]=binding을 사용해야 합니다.
처음에
이 문자열을 제거하는 방법.
오류 메시지에서 알 수 있듯이 속성 바인딩을 사용하여 검사된 HTML을 추가해야 합니다.
<p [innerHTML]="massTimingsHtml"></p>
constructor(private domSanitizer:DomSanitizer) {
this.massTimingsHtml = this.getInnerHTMLValue();
}
getInnerHTMLValue(){
return this.domSanitizer.bypassSecurityTrustHtml(this.parishDetail.mass_timings);
}
스택블리츠 예제(Swapnil Patwa의 Plunker를 기반으로 함 - 아래 주석 참조)
다음과 같이 안전 값을 소독해야 합니다.
this.domSanitizer.sanitize(SecurityContext.HTML,this.domSanitizer.bypassSecurityTrustHtml(this.parishDetail.mass_timings));
iframe을 사용할 때 이 오류가 발생하여 수정했습니다.[src]아래와 같이
참고: 성능 향상을 위해 파이프를 사용
가져오기:
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
constructor(private sanitizer: DomSanitizer, ....other DI){}
ints파일
getSafeUrl() {
return this.sanitizer.bypassSecurityTrustResourceUrl(this.url);
}
html 파일에서
<iframe [src]="getSafeUrl()" frameborder="0" *ngIf="url"></iframe>
이 방법은 함수를 여러 번 호출하기 때문에 상당히 사이클 소모가 크므로 lifeCycleHooks와 같은 내부의 URL을 소독하는 것이 좋습니다.ngOnInit().
성능 향상을 위해 파이프를 사용할 수도 있습니다.
파이프 사용하기
HTML:
<iframe [src]="url | byPassSecurity"></iframe>
sanitize.pipe.
import { Pipe, PipeTransform, SecurityContext } from "@angular/core";
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@Pipe({
name: 'byPassSecurity'
})
export class ByPassSecurityPipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
transform (value: string): SafeHtml {
return this.sanitizer.bypassSecurityTrustHtml(value);
}
}
파이프를 이용한 나의 솔루션.
HTML
<div [innerHtml]="htmlValue | byPassSecurity"></div>
파이프
import { Pipe, PipeTransform, SecurityContext } from "@angular/core";
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@Pipe({
name: 'byPassSecurity'
})
export class ByPassSecurityPipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
transform (value: string): SafeHtml {
return this.sanitizer.bypassSecurityTrustHtml(value);
}
}
각도 7에서 MATHJAX를 사용하다가 같은 오류가 발생했습니다.아래 파이프 변환으로 해결했습니다.100% 완벽하게 작동
//HTML PIPE 위생화
import { Pipe, PipeTransform, SecurityContext } from "@angular/core";
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@Pipe({
name: 'sanitizeHtml'
})
export class SanitizeHtmlPipe implements PipeTransform {
constructor(private _sanitizer: DomSanitizer) {
}
transform(value: string): SafeHtml {
return this._sanitizer.sanitize(SecurityContext.HTML, this._sanitizer.bypassSecurityTrustHtml(value))
}
}
에 구속할 필요가 없습니다.[innerHtml]온통.
를 사용하여 작동합니다.sanitize()그리고.bypassSecurityTrustHtml()이와 같이 함께:
this.mass_timings.nativeElement.innerHTML = (
this.domSanitizer.sanitize(SecurityContext.HTML, this.domSanitizer.bypassSecurityTrustHtml(this.parishDetail.mass_timings))
);
언급URL : https://stackoverflow.com/questions/45351434/safe-value-must-use-property-binding-after-bypass-security-with-domsanitizer
반응형
'programing' 카테고리의 다른 글
| 서버에서 htaccess에서 php 버전을 변경하는 방법 (0) | 2023.09.07 |
|---|---|
| jquery를 사용하여 라디오 버튼 선택값을 설정하는 방법 (0) | 2023.09.07 |
| ORA-00906: 왼쪽 괄호 누락 (0) | 2023.09.07 |
| MariaDB 구문 오류를 확인하는 방법(Error Code 1064)? (0) | 2023.09.07 |
| 파워셸의 비트와이즈 연산자 사용 (0) | 2023.09.07 |