Angular 2
Обход Sanitizing для доверенных значений
Поиск…
параметры
Params | подробности |
---|---|
селектор | имя тега вы ссылаетесь на свой компонент в html |
шаблон (templateUrl) | строка, которая представляет html, который будет вставлен везде, где находится <selector> . templateUrl - это путь к html-файлу с таким же поведением |
трубы | массив труб, которые используются этим компонентом. |
замечания
СУПЕР ВАЖНО!
ОТКЛЮЧЕНИЕ САНИТИЗАЦИИ ОСТАВЛЯЕТ ВАС ПРИ РИСКЕ XSS (межсайтовый скриптинг) И ДРУГИХ ВЕКТОРОВ ATTACK. ПОЖАЛУЙСТА, УБЕДИТЕСЬ, ЧТО ТЫ ХОТИТЕ, ЧТО ВЫ ПОЛУЧАЕТЕ 100%
Использование Pipes позволяет вам изменять только значения атрибутов:
<tag [attribute]="expression or variable reference | pipeName">
вы не можете использовать трубы таким образом:
<tag attribute="expression or variable reference | pipeName">
или таким образом
<tag attribute={{expression or variable reference | pipeName}}
Обход Sanitizing с помощью труб (для повторного использования кода)
Проект в соответствии со структурой из направляющей Angular2 Quickstart здесь .
RootOfProject
|
+-- app
| |-- app.component.ts
| |-- main.ts
| |-- pipeUser.component.ts
| \-- sanitize.pipe.ts
|
|-- index.html
|-- main.html
|-- pipe.html
main.ts
import { bootstrap } from '@angular/platform-browser-dynamic';
import { AppComponent } from './app.component';
bootstrap(AppComponent);
Он находит файл index.html в корне проекта и строит его.
app.component.ts
import { Component } from '@angular/core';
import { PipeUserComponent } from './pipeUser.component';
@Component({
selector: 'main-app',
templateUrl: 'main.html',
directives: [PipeUserComponent]
})
export class AppComponent { }
Это компонент верхнего уровня, который группирует другие компоненты, которые используются.
pipeUser.component.ts
import { Component } from '@angular/core';
import { IgnoreSanitize } from "./sanitize.pipe";
@Component({
selector: 'pipe-example',
templateUrl: "pipe.html",
pipes: [IgnoreSanitize]
})
export class PipeUserComponent{
constructor () { }
unsafeValue: string = "unsafe/picUrl?id=";
docNum: string;
getUrl(input: string): any {
if(input !== undefined) {
return this.unsafeValue.concat(input);
// returns : "unsafe/picUrl?id=input"
} else {
return "fallback/to/something";
}
}
}
Этот компонент обеспечивает представление для работы трубки.
sanitize.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizationService } from '@angular/platform-browser';
@Pipe({
name: 'sanitaryPipe'
})
export class IgnoreSanitize implements PipeTransform {
constructor(private sanitizer: DomSanitizationService){}
transform(input: string) : any {
return this.sanitizer.bypassSecurityTrustUrl(input);
}
}
Это логика, которая описывает, что форматы трубы.
index.html
<head>
Stuff goes here...
</head>
<body>
<main-app>
main.html will load inside here.
</main-app>
</body>
main.html
<othertags>
</othertags>
<pipe-example>
pipe.html will load inside here.
</pipe-example>
<moretags>
</moretags>
pipe.html
<img [src]="getUrl('1234') | sanitaryPipe">
<embed [src]="getUrl() | sanitaryPipe">
Если вы хотите проверить html во время работы приложения, вы увидите, что он выглядит так:
<head>
Stuff goes here...
</head>
<body>
<othertags>
</othertags>
<img [src]="getUrl('1234') | sanitaryPipe">
<embed [src]="getUrl() | sanitaryPipe">
<moretags>
</moretags>
</body>
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow