“Không tìm thấy thẻ meta Nội dung-Bảo mật-Chính sách.” lỗi trong ứng dụng bản đồ điện thoại của tôi


94

Sau khi cập nhật Cordova 5.0 trong hệ thống của mình, tôi tạo các ứng dụng mới. Khi tôi kiểm tra ứng dụng của mình trên một thiết bị, lần đó tôi gặp lỗi trong nhật ký bảng điều khiển:

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

Tôi thêm meta trong phần đầu

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

Nhưng một lần nữa, tôi lại gặp lỗi tương tự, trong ứng dụng tôi sử dụng plugin trình duyệt trong ứng dụng và 7 liên kết trang web khác.


3
Bạn đã cài đặt đúng plugin cordova-plugin-whitelist- github.com/apache/cordova-plugin-whitelist chưa? Sau đó, bạn sẽ phải thêm <allow-navigation href="http://*/*" />vào config.xml
Keval

1
Cảm ơn Keval, sau khi thêm <allow-navigation href = "http: // * / *" /> bây giờ ứng dụng của tôi hoạt động tốt. Cảm ơn những người một lần nữa.


3
Khi một lỗi có thể được tạo ra khi thiếu một ký tự trong mã, tại sao SO không cho phép các chỉnh sửa có ít hơn sáu ký tự? Điều này khá dễ sửa, chỉ là cố gắng cứu người khác vài giây trong tương lai. Thiếu một dấu ngoặc kép ở cuối thuộc tính nội dung của thẻ meta.
Jason D.

Câu trả lời:


86

Sau khi thêm cordova-plugin-whitelist , bạn phải yêu cầu ứng dụng của mình cho phép truy cập vào tất cả các liên kết trang web hoặc liên kết cụ thể, nếu bạn muốn giữ nó cụ thể.

Bạn chỉ cần thêm cái này vào config.xml của mình, bạn có thể tìm thấy cái này trong thư mục gốc của ứng dụng:

Được đề xuất trong tài liệu:

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

hoặc là:

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

Từ tài liệu của plugin:

Danh sách trắng điều hướng

Kiểm soát URL mà chính WebView có thể được điều hướng đến. Chỉ áp dụng cho điều hướng cấp cao nhất.

Quirks: trên Android, nó cũng áp dụng cho iframe cho (các) lược đồ không phải http.

Theo mặc định, chỉ cho phép điều hướng đến tệp: // URL. Để cho phép các URL khác, bạn phải thêm thẻ vào config.xml của mình:

<!-- 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

Bạn phải thêm thẻ meta CSP trong phần đầu của ứng dụng index.html

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

Chính sách bảo mật nội dung

Kiểm soát yêu cầu mạng nào (hình ảnh, XHR, v.v.) được phép thực hiện (trực tiếp qua webview).

Trên Android và iOS, danh sách trắng yêu cầu mạng (xem ở trên) không thể lọc tất cả các loại yêu cầu (ví dụ: <video>& WebSockets không bị chặn). Vì vậy, ngoài danh sách trắng, bạn nên sử dụng thẻ Chính sách bảo mật nội dung <meta> trên tất cả các trang của mình.

Trên Android, hỗ trợ cho CSP trong webview hệ thống bắt đầu với KitKat (nhưng khả dụng trên tất cả các phiên bản sử dụng Crosswalk WebView).

Dưới đây là một số khai báo CSP mẫu cho các .htmltrang của bạn :

<!-- 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">

Khi tôi thêm CSP Decleration, đoạn mã sau cho google map bị lỗi như thế này. Bất kỳ ý tưởng ? var pos = new google.maps.LatLng (position.coords.latitude, position.coords.longitude); // dòng 173 11-09 21: 17: 30,724: D / SystemWebChromeClient (25.692): file: ///android_asset/www/index.html: Dòng 173: của router ReferenceError: google không được định nghĩa
shamaleyte

1
Tôi cần phải đóng các thẻ meta có /> để được nhận dạng
metamagikum

23

Có lỗi trong thẻ meta của bạn.

Của bạn:

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

Đã sửa:

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

Lưu ý dấu hai chấm sau "script-src" và dấu ngoặc kép cuối thẻ meta.


3
khi tôi bao gồm <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>tải lại sống với khuôn khổ ion ngừng hoạt động vì thế hãy cẩn thận những người khác ngoài kia
CommonSenseCode

@codePlusPlus để kích hoạt lại Ionic livereload, thêm http://localhost:35729vào lệnh script-scr và ws://localhost:35729lệnh connect-src.
kolli

@kolli, bạn có thể cho biết các chỉ thị mới trông như thế nào không? không rõ làm thế nào để thêm chúng vào chỉ thị.
jessewolfe

Tôi thấy thông tin là trong bài viết gốc. Tuy nhiên, để làm rõ: Lưu ý rằng bằng cách 'thêm', phương tiện này, bạn có thể thay thế script-src 'self' 'unsafe-inline' 'unsafe-eval'với script-src 'self' http://localhost:35279 'unsafe-inline' 'unsafe-eval'và bạn sẽ thêm một chỉ thị mới với một tách dấu chấm phẩy đến hết thuộc tính nội dung:; script-src ws://localhost:35279
jessewolfe

Điều chỉnh ở trên ... đối với phần thứ hai, nó phải là ; connect-src 'self' ws://localhost:35279. Lưu ý rằng tôi đã gặp lỗi (không thể truy cập tệp: // <đường dẫn tới index.html> do vi phạm CSP) cho đến khi tôi thêm 'self'.
jessewolfe

2

Đối với tôi, chỉ cần cài đặt lại plugin danh sách trắng là đủ :

cordova plugin remove cordova-plugin-whitelist

và sau đó

cordova plugin add cordova-plugin-whitelist

Có vẻ như việc cập nhật từ các phiên bản trước của Cordova không thành công.


1

Đối với tôi, vấn đề là tôi đang sử dụng các phiên bản lỗi thời của nền tảng cordova androidios . Vì vậy, nâng cấp lên android@5.1.1ios@4.0.1 đã giải quyết được vấn đề này.

Bạn có thể nâng cấp lên các phiên bản cụ thể sau:

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

ý bạn là android 5.1.1 ?
mix3

Tôi đã làm theo cả lời khuyên của @Maxim và Pierre-Alexis de Solminihac, và cuối cùng thì Ứng dụng của tôi cũng hoạt động tốt. Cảm ơn!
Zalakain

0

Có một vấn đề khác về kết nối. Một số phiên bản Android có thể kết nối nhưng một số không thể. Vì vậy, có một giải pháp khác

trong AndroidManifest.xml:

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

Chỉ cần thêm 'android: usingCleartextTraffic = "true"'

và vấn đề được giải quyết cuối cùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.