2015. 7. 2. 19:33ㆍMobile
format-detection
스마트폰의 브라우저는 전화, 주소, 이메일 등을 발견하면 자동으로 링크를 걸게됩니다. 이를 제어하기 위해 아래 meta 태그를 사용합니다.
<meta name="format-detection" content="telephone=no, address=no, email=no" />
위 설정은 브라우저가 컨텐트 내의 전화, 주소, 이메일을 발견해도 링크를 자동으로 걸지 않게 합니다.
tap-highlight
IE 11에서 링크를 탭할 경우, 터치된 대상을 명확하게 표시하기 위해 시각적으로 강조하는 기능이 있습니다. 이 기능은 대체로 유용하지만, 이미지링크 혹은 스타일이 적용된 링크의 경우 사용자 경험을 떨어뜨리는 요인이 되기도 합니다. 이를 위해 다음과 같은 <meta> 태그 설정은 이러한 시각적 강조기능을 제거합니다.
<meta name="msapplication-tap-highlight" content="no">
cordova-plugin-whitelist
cordova에서 지원하는 보안설정을 위 플러그인 입니다. 이 플러그인은 Cordova App에서 화이트리스트 정책을 구현할 수 있게 합니다.
지원플랫폼
- Android 4.0.0 이상
- iOs 4.0.0 이상
Navigation Whitelist
App의 WebView가 이동할 수 있는 URL을 통제할 수 있습니다. Top-level 네비게이션에만 적용할 수 있습니다. 안드로이드에서는 Http(s) 스킴이 아닌 iframe에도 적용됩니다.
기본적으로 네비게이션은 file://
URL만 허용하도록 정의됩니다. 다른 URL을 허용하기 위해서는 <allow-navigation>
태그를 config.xml
에 추가해야합니다.
<!-- example.com 링크를 추가합니다. --> <allow-navigation href="http://example.com/*" /> <!-- 프로토콜, 호스트 접두사, 접미사에 와일드카드를 적용할 수 있습니다. --> <allow-navigation href="*://*.example.com/*" /> <!-- 모든 네트워크, 프로토콜에 대해 허용하기 위해서는 아래를 사용합니다. (보안 상 권장하지 않음) --> <allow-navigation href="*" /> <!-- 위의 *은 아래 3줄의 선언과 동일합니다. --> <allow-navigation href="http://*/*" /> <allow-navigation href="https://*/*" /> <allow-navigation href="data:*" />
Intent Whitelist
앱은 시스템이 특정 URL을 실행하도록 요청할 수 있습니다. Intent Whitelist는 시스템에 요청 가능한 URL을 통제할 수 있습니다. 기본 값은 어떤 URL도 열수 없도록 되어 있습니다. Intent Whitelist 설정은 안드로이드에서 BROWSEABLE 유형의 Intent를 보내는 것과 동일합니다.
이 Whitelist는 플러그인에는 적용될 수 없으며, 오로지 window.open()에 대한 호출 또는 hyperlinks에만 적용할 수 있습니다.
config.xml
에서 다음과 같이 <allow-intent>
를 설정하세요.
<!-- 브라우저에서 웹페이지로의 모든 http, https링크를 열수 있도록 허용합니다. --> <allow-intent href="http://*/*" /> <allow-intent href="https://*/*" /> <!-- example.com 링크가 브라우저에서 열리도록 허용합니다. --> <allow-intent href="http://example.com/*" /> <!-- 프로토콜, 호스트 접두사, 접미사에 대해 와일드카드를 적용할 수 있습니다. --> <allow-intent href="*://*.example.com/*" /> <!-- SMS 링크가 메시징 앱을 열수 있도록 허용합니다. --> <allow-intent href="sms:*" /> <!-- 전화번호 유형의 링크가 전화를 걸 수 있도록 합니다. --> <allow-intent href="tel:*" /> <!-- 지도의 좌표를 나타내는 링크가 맵을 열수 있도록 허용합니다. --> <allow-intent href="geo:*" /> <!-- 모든 유형의 URL을 허용합니다. 즉, 모든 URL이 모든 유형의 앱을 실행할 수 있습니다. (보안 상 권장되지 않음) --> <allow-intent href="*" />
Network Request Whitelist
어떤 네트워크 유형(이미지, XHR, 기타 등등)을 허용할 지 통제할 수 있습니다. (cordova native hooks를 경유하여)
Network Request Whitelist 대신에, 가능하다면 Content Security Policy(CSP) 설정을 사용할 것을 권장합니다. CSP가 보다 더 안전하고, 폭넓은 보안설정을 가능케 합니다.
Network Request Whitelist는 CSP를 지원하지 않는 WebView를 지원하는데 사용할 수 있습니다.
아래와 같이 config.xml
에 <access> 태그를 설정하세요.
<!-- google.com의 이미지, XHR, 기타 등등의 네트워크 요청을 허용합니다. --> <access origin="http://google.com" /> <access origin="https://google.com" /> <!-- maps.google.com의 하위 도메인에 대한 네트워크 요청을 허용합니다. --> <access origin="http://maps.google.com" /> <!-- google.com의 하위 도메인에 대한 네트워크 요청을 허용합니다. --> <access origin="http://*.google.com" /> <!-- content: URLs에 대한 요청을 허용합니다. --> <access origin="content:///*" /> <!-- 모든 요청을 허용합니다. --> <access origin="*" />
<access>
태그를 설정하지 않으면, file://
URL만 허용됩니다. 그러나, 기본 Cordova Application에는 <access origin="*">
이 포함되어 있습니다.
안드로이드는 기본적으로 https://ssl.gstatic.com/accessibility/javascript/android/에 대한 요청을 허용합니다. 왜냐하면 TalkBack(시각장애인을 위해 문자를 음성으로 읽어주는 기능)이 정상적으로 동작하는데 필요하기 때문입니다.
Content Security Policy (CSP)
어떤 네트워크 요청(이미지, XHR, 기타 등등)이 만들어 질 수 있는지 통제할 수 있습니다. (WebView에서 직접 요청을 통제하는 기능)
위의 Newwork Request Whitelist는 기본적으로 안드로이드나 iOS에서 모든 요청을 필터링 할 수 없습니다. (예: <video>, WebSocket는 필터링 되지 않습니다.) 따라서 Newwork Request Whitelist와 더불어 CSP를 사용하는 사용해야 합니다.
안드로이드에서는 CSP에 대한 지원이 kitkat(버전 4.4)부터 지원됩니다. 이를 위해, Crosswalk WebView를 이용하면 안드로이드 기본WebView의 버전별 파편화 문제 및 CSP미지원 문제를 해결하실 수 있습니다. (참고자료: WebView와 Crosswalk)
CSP는 다음과 같이 .html 페이지의 <meta> 태그를 통해 설정하실 수 있습니다.
<!-- 권장 기본설정 * gap: iOS(UIWebView를 이용할 때)를 위해 필요합니다. 또한 JS->Native 커뮤니케이션에도 필요합니다. * https://ssl.gstatic.com은 안드로이드에서만 필요하며 TalkBack이 정상적으로 동작하는데 필요합니다. * XSS 취약점의 위험을 완화하기 위해서 eval()과 인라인 스크립트의 설정이 비활성화 됩니다. 이 설정을 바꾸기 위해서는, * 인라인 스크립트 실행하기: 'unsafe-inline'을 default-src에 추가해주세요. * eval() 활성화 하기: 'unsafe-inline'을 default-src에 추가해주세요. --> <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *"> <!-- example.com으로 요청을 가능케 합니다. --> <meta http-equiv="Content-Security-Policy" content="default-src 'self' example.com"> <!-- 모든 요청, 인라인 스타일, eval()을 가능케 합니다. --> <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> <!-- https에서만 XHR이 허용되도록 합니다. --> <meta http-equiv="Content-Security-Policy" content="default-src 'self' https:"> <!-- iframe이 https://example.com/에 접속할 수 있도록 합니다. --> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://example.com">
'Mobile' 카테고리의 다른 글
[Xamarin] Razor Template를 통해 HTML 출력하기 (0) | 2016.03.29 |
---|---|
[Xamarin] WCF-Add/Service Reference가 나타나지 않을 때 (0) | 2016.03.16 |
[Xamarin] 자마린에서 팝업 띄우기 (0) | 2016.03.08 |
[Mobile] Android WebView의 문제점 및 대안 (0) | 2015.07.03 |
[Mobile] ViewPort란? (0) | 2015.07.02 |