티스토리 뷰
반응형
Content-Security-Policy 메타 태그를 사용하여 외부 컨텐츠를 허용해보자
도대체.
왜 이런.
TIL을 작성하나?
- 이왕에 폰갭으로 Hello World를 찍은 김에 기존 React Project 중 하나를 폰갭으로 이식해보자! 라는 원대한 꿈을 가짐.
- 이식해보려는 프로젝트는
Serverless Architecture
를 준비하면서 만들었던Pure React Web App
형태의 웹 페이지였음. (해당 React App을 구동하는데 필요한 서버가 없음, 필요한 데이터 작업은 API 콜을 사용함) - 해당 React 프로젝트를
npm run build
후 나온html
과css
,js
파일을 폰갭 프로젝트의www
에 집어넣고phonegap serve
!! - 안드로이드 테스트 앱으로 확인해보니 이미지 리소스가 전혀 뜨지 않음. 그리고 콘솔에는 다음과 같은
Warning
이 출력됨.Content Security Policy has been added:<meta http-equiv="Content-Security-Policy" content="default-src * gap: ws: https://ssl.gstatic.com;img-src 'self' data: content:;style-src 'self' 'unsafe-inline' data: blob:;script-src * 'unsafe-inline' 'unsafe-eval' data: blob:;">
도대체.
이 문제가.
왜 발생하였나?
- Weinre라는 원격 디버깅 툴로 체크해봤지만 아무것도 뜨지 않았음.
- 해당 React 프로젝트는 대부분의 Static Resource(Image, Font 등)를 CDN에 넣어두고 필요할 때만
Http GET Request
를 통해 가져오고 있었음. - 대충 구글을 훓어보니 XSS Injection을 방지하기 위해 Github Issue에서 다양한 논의가 오고갔으며 결국
Content-Security-Policy
(이하CSP
) 메타 태그로 허가 되지 않은 URL에서 Static Resource를 가져오는 것이 막히게 되었음.
그렇다면.
우리는.
이것을.
어떻게.
대처해야하나??
- 영어에는 취약하지만 왠지 위
Warning
에 나온meta
태그를 추가해줘야 할 것만 같다..! - 그래서
index.html
에 다음 메타 태그를 추가해주었다.- https://ssl.gstatic.com : 외부의 gap과 ws와 관련된 리소스들을 가져올 수 있도록 Default로 포함된듯 하다.
- 나의 경우 현재 이미지 리소스를 가져오는 것이 문제였으므로
img-src
다음에 허가 해주려는 URL을 추가해주었다.
- 이제 이미지 리소스가 잘 뜬다.
실제 PhoneGap으로 구동한 React App
사진 잘 뜬다.. 배고파진다..
기타사항
PhoneGap (Adobe)
말고 부모 프로젝트 격인Cordova (Apache)
의 경우cordova-plugin-whitelist
라는 친구가 있다. 이 친구가 폰갭에도 적용될런지는 아직 모르지만 현재 단계에서는 필요하지 않아 사용을 하지 않았다.- 혹시나 싶어 폰갭 프로젝트 루트 디렉토리의
config.xml
에<allow-navigation href="*://*.내가허가하려는URL/*" />
를 추가해봤었지만 쓸모가 없었다.
- 혹시나 싶어 폰갭 프로젝트 루트 디렉토리의
- 안드로이드의 경우
CSP
에 관련된 기능을 4.4 (Kitkat) 부터 지원한다고 함. - React App 내에서 사용한
node-fetch
와 같은XHRHttpRequest
친구들은CSP
없이도 Call이 잘 되었음...? (이젠 나도 뭐가 뭔지 모르겠다.) - 아직
apk
파일로 빌드해본 것이 아니니 방심할 수는 없다.. - 맞다. 사실 플레이팅 간접 홍보다. (플레이팅x스페이스클라우드 기사)
- 참고 URL
Origin TIL : https://github.com/uyu423/TIL
반응형
'개인공부 > Today I Learned (TIL)' 카테고리의 다른 글
[TIL] Bitnami Apache2 SSL 설정 삽질기 (0) | 2016.12.07 |
---|---|
[TIL] Dependency Injection with Express.js에 대한 고민 (0) | 2016.12.06 |
[TIL] AWS S3 업로드시 자동으로 Make Public 적용하기 (0) | 2016.11.24 |
[TIL] PhoneGap : Hello World를 내 폰에 찍어보자 (0) | 2016.11.22 |
[TIL] DDD : 효과적인 모델링을 위한 요소 (0) | 2016.11.21 |
[TIL] 2016 OSS 개발자 포럼 AWS 입문 세미나에서 줍줍한 정보 (0) | 2016.11.19 |
[TIL] 실행 파일을 우분투 Application으로 등록하기 (0) | 2016.11.18 |