Angular에서 iframe사용시 unsafe value 에러 해결법

HTML에서 iframe을 사용할 경우 XSS(Cross Site Scripting) 공격에 대한 방어의 목적으로 SOP( Same Oringin Policy) 정책을 걸어놨습니다.

iframe을 이용한 XSS공격은 간단히 설명하면 해커가 어떤 게시판에 글을 작성할때 iframe으로 해킹코드가 있는 문서를 불러오도록 해 놓을 경우 해당 게시물을 열어 보는 대부분의 사용자 정보를 탈취할 수 있게 되는 해킹 기법을 말합니다.

하지만 보안이 검증된 youtube 영상을 불러온다던가 하는 경우에는 일시적으로 SOP를 해제 시켜야 하는 경우가 생기는데요.
그 방법에 대해 Angular에서는 pipe를 이용하여 외부 iframe을 불러 올 수 있게 처리 할 수 있습니다.

에러 유형

보통 아래와 같은 에러메시지가 발생 합니다.

Error: unsafe value used in a resource URL context

발생상황

HTML에 iframe을 사용하면 발생을 합니다.

<iframe width="100%" height="300" [src]="youtube.url"></iframe>

해결방법

Angular의 Pipe기능을 이용하여 template에서 iframe를 불러올때 사용하면 됩니다.
Pipe문서를 따로 만들어도 되고 Component에 직접 적용해도 됩니다.

아래와 같이 Pipe를 사용하기 위해 Pipe, PipeTransform를 불러오고 XSS를 막기 위해 DomSanitizerimport 합니다.
동일한 문서의 하단에 아래와 같이 @Pipe를 적용합니다.

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);
  }
} 

아래와 같이 NgModuledeclarations에도 등록을 해놔야 작동을 합니다.

import { SafePipe } from './safe-pipe';

@NgModule({
  declarations: [ SafePipe ],
  imports: [ ],
  exports: [ ]
})

마지막으로 template에 Pipe에서 지정한 이름 safe를 붙혀넣습니다.

<iframe width="100%" height="300" [src]="youtube.url | safe"></iframe>

끝입니다. ㅎ

참고

How to set iframe src in Angular 2 without causing unsafe value exception? – stack overflow

Similar Posts

  • 시놀로지 DSM7.0!! 좋아진 점 5가지

    RAM을 16 Gbyte로 잘못 업그레이드하는 바람에 5개월 동안 개고생 하다가 겨우겨우 복구해서 초기화한 김에 DSM 7.0 베타버전을 설치해 봤습니다. 시놀로지의 장점이라고 한다면 하드웨어에 못지않은 강력한 소프트웨어를 가지고 있다는 것입니다. 그것의 기반이 되는 것이 DSM(DiskStation Manager)인데 2020년까지는 DSM 버전이 6.2였으며 21년도에 7.0으로 오픈을 목적으로 현재 베타 버전을 제공하고 있습니다. 베타버전이기는 하지만 DSM 7.0을 사용해 보면서 느낀 […]

  • 영문 WordPress를 한글 WordPress로 바꾸기

    시놀로지에서 도커로 WordPress를 설치하면 불행하게도 멀티랭귀지로 설치되는 것이 아니라 영문Wordpress가 설치가 됩니다. 아무래도 Docker 이미지를 가볍게 유지하기 위해서 Languages 폴더를 제거하고 만들어서 그런것 같습니다. 지금 설명드리는 영문 WordPress를 한글 WordPress로 변경하는 것은 시놀로지 Docker에 만 해당되는 것은 아니고 모든 영문Wordpress를 한글로 변경할때 해당 되는 내용이기도 합니다. 시놀로지에서 Docker로 WordPress를 설치하는 방법은 이전에 포스팅한 내용을 참고하세요. […]

  • 레이아웃의 다단을 100% 로 맞추기

    예전에 Table로 레이아웃을 잡을 때는 어렵지 않게 구현되었던 표현인데 근래들어서 웹표준에 맞게 코딩을 하게 되면서 레이아웃을 DVI태그로 구현해야 하게 되므로써 다소 구현이 어려워진 것 중에 하나가 다단을 구성하는 것이 아닐까 합니다. 그 다단을 구현하는 방법이 여러가지가 있을 것 같은데.. 이번에 소개를 해드리는 것은 javascript로 구현하는 방법입니다. 레이아웃을 구성 시 2단 또는 3단 이상의 다단을 구성할때 […]

  • 시놀로지 Docker로 WordPress 완벽하게 설치하기

    시놀로지는 정말 좋은 어른들의 장난감인것 같습니다. 할게 이것 저것 무궁무진하게 많습니다. 우리 가족의 사진 히스토리를 기록할 수도 있고 어디에서든지 비용부담없이 동영상을 즐길 수도 있고 만화서버로도 이용할 수 있습니다. 그중에서도 프로그래머나 개발자 라면 정말 반길만한 서비스가 있는데, 바로 도커(Docker)라고 할 수 있습니다. 도커에 대해서 자세히 알려면 공부를 많이 해야 겠지만 간단하게 말한다면… 개발자가 개발을 하다가 “이게 […]

  • 가상머신에 Node.js설치하고 환경설정하기

    이전 포스팅에서 VirtualBox와 Vagrant를 소개하고 설치하는 포스팅을 했었습니다. 이번에는 가상머신 위에 간단하게 Node.js를 설치하고 환경설정을 하는 방법을 포스팅하겠습니다. NVM (Node Version Manager) 설치하기 NVM은 Node.js를 버전별로 설치하고 관리할 수 있게 도와주는 툴입니다. 그래서 한 시스템 안에 기존버전의 Node.js를 삭제할 필요없이 여러 버전의 Node.js를 쉽게 설치하고 사용할 수 있게 해 줍니다. 주의 할 점은 NPM을 사용하지 […]

  • node.js로 Youtube 다루기

    Youtube가 무엇인지는 따로 설명하지 않아도 대부분의 사람들이 알것이라고 생각합니다. 이 youtube도 구글에서 OpenAPI를 제공하고 있어서 Node.js에서 활용을 할 수 가 있습니다. 동영상을 업로드하거나 업데이트하거나 또는 검색어를 통해 리스트를 받아볼 수도 있습니다. 이런기능을 잘 활용하면 유의미한 APP을 개발할 수 있습니다. 이번 포스팅에서는 간단하게 Youtube Data API를 활용하여 원하는 검색어로 검색을 하는 일련의 과정을 작성하도록 하겠습니다. 0.1. […]

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다