Zaktualizuj v8
Poniższe odpowiedzi działają, ale narażają Twoją aplikację na zagrożenia bezpieczeństwa XSS! . Zamiast używać this.sanitizer.bypassSecurityTrustResourceUrl(url)
, zaleca się użyciethis.sanitizer.sanitize(SecurityContext.URL, url)
Aktualizacja
Dla wersji RC.6 ^ użyj DomSanitizer
Plunker
A dobrą opcją jest użycie do tego czystej rury:
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer} from '@angular/platform-browser';
@Pipe({ name: 'safe' })
export class SafePipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
transform(url) {
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
}
pamiętaj, aby dodać nowe SafePipe
do declarations
tablicy AppModule. ( jak widać w dokumentacji )
@NgModule({
declarations : [
...
SafePipe
],
})
html
<iframe width="100%" height="300" [src]="url | safe"></iframe>
Plunker
Jeśli używasz embed
tagu, może to być dla Ciebie interesujące:
Stara wersja RC.5
Możesz wykorzystać w DomSanitizationService
następujący sposób:
export class YourComponent {
url: SafeResourceUrl;
constructor(sanitizer: DomSanitizationService) {
this.url = sanitizer.bypassSecurityTrustResourceUrl('your url');
}
}
A następnie powiąż url
w swoim szablonie:
<iframe width="100%" height="300" [src]="url"></iframe>
Nie zapomnij dodać następujących importów:
import { SafeResourceUrl, DomSanitizationService } from '@angular/platform-browser';
Próbka Plunker
Pipe({ name: 'safe' }) export class SafePipe implements PipeTransform { constructor(private sanitizer: DomSanitizer) {} transform(url): any { return this.sanitizer.bypassSecurityTrustResourceUrl(url); } }
iw szablonie wzywam<iframe width="100%" height="315" src="{{url}} | safe" frameborder="0" allowfullscreen></iframe>
. Ale to nie działa z błędem „niebezpieczna wartość”. Proszę o pomoc[src]="url | safe"
Po prostu usuń nawiasythis.sanitizer.sanitize(SecurityContext.URL, url)
się komunikat o błędzie „BŁĄD Błąd: niebezpieczna wartość używana w kontekście adresu URL zasobu”. I zmień to nathis.sanitizer.bypassSecurityTrustResourceUrl(url)
działa dobrze. Masz jakiś pomysł, co może być nie tak?this.sanitizer.sanitize(SecurityContext.URL, url)
nie działa ithis.sanitizer.bypassSecurityTrustResourceUrl(url)
działa, ale podnosi problem z dużą luką w zabezpieczeniach w analizie kodu statycznego, co uniemożliwia mi przeniesienie tego do produkcji. Potrzebujesz sposobu, aby to naprawićTen działa dla mnie.
źródło
Działa mi to na Angular 5.2.0
sarasa.Component.ts
sarasa.Component.html
to wszyscy ludzie !!!
źródło
Walczyłem przez 4 godziny. problem był w tagu img. Kiedy używasz nawiasu kwadratowego do 'src', np. [Src]. nie możesz użyć tego wyrażenia kątowego {{}}. po prostu podajesz bezpośrednio z przykładu obiektu poniżej. jeśli podasz wyrażenie kątowe {{}}. pojawi się błąd interpolacji.
Najpierw użyłem ngFor do iteracji krajów
po drugie umieścisz to w tagu img. to jest to.
źródło
Natknąłem się również na ten problem, ale aby użyć bezpiecznej rury w moim module kątowym, zainstalowałem pakiet safe-pipe npm, który możesz znaleźć tutaj . FYI, to działało w Angular 9.1.3, nie próbowałem tego w żadnej innej wersji Angular. Oto jak dodajesz to krok po kroku:
Zainstaluj pakiet poprzez npm install safe-pipe lub yarn add safe-pipe. Spowoduje to zapisanie odniesienia do niego w zależnościach w pliku package.json, który powinieneś mieć już od rozpoczęcia nowego projektu Angular.
Dodaj moduł SafePipeModule do NgModule.imports w pliku modułu Angular w następujący sposób:
Dodaj bezpieczną rurkę do elementu w szablonie komponentu Angular, który importujesz do swojego NgModule w ten sposób:
źródło
źródło
Gratulacje! ¨ ^^ Mam dla Ciebie łatwe i wydajne rozwiązanie, tak!
Świetny ;)
źródło
unsafe value used in a resource URL context
<video> <source [src]=video.url type="video/mp4" /> Browser not supported </video>
, możesz go użyć również do wysyłania dokumentów ... jeśli masz problemy z tagiem wideo, jestem tutaj;)