Вы должны доверять HTML
первые перед впрыскиванием. Вы должны использовать DomSanitizer
для такой вещи. Элемент <h3>
считается безопасным. Элемент <input>
нет.
Изменить FaxSendComponent
на что-то вроде этого:
export class FaxSendComponent {
private _inputpdf: string = '<input type="text" name="fname">';
public get inputpdf() : SafeHtml {
return this._sanitizer.bypassSecurityTrustHtml(this._inputpdf);
}
constructor(private _sanitizer: DomSanitizer){}
}
И ваш шаблон остаются такими же, как это:
<div [innerHTML]="inputpdf"></div>
Немного хедз-ап, хотя:
ПРЕДУПРЕЖДЕНИЕ : вызов этого метода с ненадежными пользовательскими данными предоставляет вашему приложению риски безопасности XSS!
Если вы планируете использовать этот метод больше, попробуйте написать Pipe
для выполнения этой задачи.
@Pipe({
name: 'sanitizeHtml'
})
export class SanitizeHtml implements PipeTransform {
constructor(private _sanitizer: DomSanitizer){}
transform(v: string) : SafeHtml {
return this._sanitizer.bypassSecurityTrustHtml(v);
}
}
Если у вас есть труба, как это, ваш FaxSendComponent
изменится следующим образом:
@Component({
selector: 'fax-send',
template: `<div [innerHTML]="inputpdf | sanitizeHtml"></div>`
})
export class FaxSendComponent {
public inputpdf: string = '<input type="text" name="fname">';
}
Почему бы вам не проверить ссылку в сообщении предупреждения? – undefined
Я проверяю его, и я пытаюсь, но он не работает –
Я просто хотел сказать, что обратные ссылки не работают как решение этой проблемы. Я слишком новичок, чтобы комментировать это предложение. Однако обратные шаги - хорошая практика. –