"콘텐츠 보안 정책 메타 태그를 찾을 수 없습니다." 내 phonegap 응용 프로그램의 오류


94

시스템에서 Cordova 5.0을 업데이트 한 후 새 애플리케이션을 작성합니다. 그 당시 장치에서 내 응용 프로그램을 테스트했을 때 콘솔 로그에 오류가 발생했습니다.

No Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.

헤드 섹션에 메타를 추가합니다

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>

그러나 다시, 동일한 오류가 발생했습니다. 애플리케이션에서 인앱 브라우저 플러그인과 다른 웹 사이트 링크 7 개를 사용합니다.


3
당신은 제대로 설치 cordova-plugin-whitelist- github.com/apache/cordova-plugin-whitelist 플러그인을? 그 후에 config.xml 에 추가 <allow-navigation href="http://*/*" />해야합니다
Keval

1
Keval에게 감사드립니다. <allow-navigation href = "http : // * / *"/>를 추가하면 이제 내 응용 프로그램이 제대로 작동합니다. 다시 한번 감사드립니다.


3
코드에서 한 문자가 누락되어 오류가 발생할 수 있는데 왜 6 자 미만의 편집을 허용하지 않습니까? 이것은 수정하기가 매우 쉬우 며, 앞으로 몇 초 동안 다른 사람을 구하려는 것뿐입니다. 메타 태그의 콘텐츠 속성 끝에 큰 따옴표가 없습니다.
Jason D.

답변:


86

cordova-plugin-whitelist를 추가 한 후 구체적으로 유지하려면 모든 웹 페이지 링크 또는 특정 링크에 대한 액세스를 허용하도록 애플리케이션에 지시해야합니다.

애플리케이션의 루트 디렉토리에서 찾을 수있는 config.xml에 간단히 추가 할 수 있습니다.

문서에서 권장 되는 사항 :

<allow-navigation href="http://example.com/*" />

또는:

<allow-navigation href="http://*/*" />

플러그인 문서에서 :

탐색 허용 목록

WebView 자체를 탐색 할 수있는 URL을 제어합니다. 최상위 탐색에만 적용됩니다.

단점 : Android에서는 비 http (s) 스키마의 iframe에도 적용됩니다.

기본적으로 file : // URL에 대한 탐색 만 허용됩니다. 다른 URL을 허용하려면 config.xml에 태그를 추가해야합니다.

<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />

<!-- Wildcards are allowed for the protocol, as a prefix
     to the host, or as a suffix to the path -->
<allow-navigation href="*://*.example.com/*" />

<!-- A wildcard can be used to whitelist the entire network,
     over HTTP and HTTPS.
     *NOT RECOMMENDED* -->
<allow-navigation href="*" />

<!-- The above is equivalent to these three declarations -->
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />


38

앱의 헤드 섹션에 CSP 메타 태그를 추가해야합니다. index.html

https://github.com/apache/cordova-plugin-whitelist#content-security-policy

콘텐츠 보안 정책

허용되는 네트워크 요청 (이미지, XHR 등)을 제어합니다 (웹뷰를 통해 직접).

Android 및 iOS에서 네트워크 요청 허용 목록 (위 참조)은 모든 유형의 요청을 필터링 할 수 없습니다 (예 : <video>& WebSockets가 차단되지 않음). 따라서 허용 목록 외에도 모든 페이지에 콘텐츠 보안 정책 <meta> 태그를 사용해야 합니다.

Android에서 시스템 webview 내의 CSP 지원은 KitKat으로 시작됩니다 (그러나 Crosswalk WebView를 사용하는 모든 버전에서 사용 가능).

다음은 .html페이지에 대한 몇 가지 CSP 선언의 예입니다 .

<!-- Good default declaration:
    * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
    * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
    * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
        * Enable inline JS: add 'unsafe-inline' to default-src
        * Enable eval(): add 'unsafe-eval' to 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 *">

<!-- Allow requests to foo.com -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">

<!-- Enable all requests, inline styles, and eval() -->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

<!-- Allow XHRs via https only -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">

<!-- Allow iframe to https://cordova.apache.org/ -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org">

CSP Decleration을 추가하면 Google지도에 대한 다음 코드가 이와 같이 실패합니다. 어떤 생각? var pos = new google.maps.LatLng (position.coords.latitude, position.coords.longitude); // line 173 11-09 21 : 17 : 30.724 : D / SystemWebChromeClient (25692) : file : ///android_asset/www/index.html : Line 173 : Uncaught ReferenceError : google is not defined
shamaleyte

1
나는 /> 인식 할 수와 메타 태그를 닫을 필요
metamagikum을

23

메타 태그에 오류가 있습니다.

당신 것:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>

수정 됨 :

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>

"script-src"뒤의 콜론과 메타 태그의 끝 큰 따옴표에 유의하십시오.


3
내가 포함 할 때 <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>이온 프레임 워크 라이브 다시로드가 다른 사람을 조심 그래서 작동이 중지
CommonSenseCode

@codePlusPlus를 사용하여 Ionic livereload를 다시 활성화 http://localhost:35729하고 script-scr 지시문과 ws://localhost:35729connect-src 지시문에 추가하십시오.
kolli

@kolli, 새로운 diretives가 어떻게 생겼는지 보여줄 수 있습니까? 지시문에 추가하는 방법이 명확하지 않습니다.
jessewolfe

정보가 원본 게시물에 있음을 확인했습니다. 이 방법을 '추가'로 바꿀 수 있다는 것을 참고 : 그러나 명확하게 script-src 'self' 'unsafe-inline' 'unsafe-eval'script-src 'self' http://localhost:35279 'unsafe-inline' 'unsafe-eval'당신은 content 속성의 끝에 분리 세미콜론 새로운 지시어를 추가 :; script-src ws://localhost:35279
jessewolfe

위의 수정 ... 두 번째 부분의 경우 ; connect-src 'self' ws://localhost:35279. 'self'를 추가 할 때까지 오류가 발생했습니다 (CSP 위반으로 인해 file : // <index.html 경로>에 액세스 할 수 없음).
jessewolfe

2

나를 위해 화이트리스트 플러그인 을 다시 설치하는 것으로 충분했습니다 .

cordova plugin remove cordova-plugin-whitelist

그리고

cordova plugin add cordova-plugin-whitelist

이전 버전의 Cordova에서 업데이트하지 못한 것 같습니다.


1

나에게 문제는 내가 오래된 버전의 cordova androidios 플랫폼을 사용하고 있다는 것입니다. 따라서 android@5.1.1ios@4.0.1로 업그레이드하면 문제가 해결되었습니다.

다음 특정 버전으로 업그레이드 할 수 있습니다.

cordova platforms rm android
cordova platforms add android@5.1.1
cordova platforms rm ios
cordova platforms add ios@4.0.1

android 5.1.1 을 의미 했 습니까?
mix3d

@Maxim과 Pierre-Alexis de Solminihac의 조언을 모두 따랐고 마침내 내 앱이 제대로 작동하게되었습니다. 감사!
Zalakain

0

연결에 대한 또 다른 문제가 있습니다. 일부 Android 버전은 연결할 수 있지만 일부는 연결할 수 없습니다. 그래서 또 다른 해결책이 있습니다

AndroidManifest.xml에서 :

<application ... android:usesCleartextTraffic="true">
        ...
    </application>

'android : usesCleartextTraffic = "true"'를 추가하세요.

그리고 마침내 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.