Cordova В браузере приложений App Transport Security

Я пытаюсь загрузить контент в браузер приложений с моего локального сервера (используя плагин httpd). веб-страница поступает с https, а локальный сервер, конечно, загружает http.

Я тестирую на Iphone x IOS 12. Используя Adobe Build

Пытался:

<access origin='*' allows-arbitrary-loads-in-media='true' allows-arbitrary-loads-in-web-content='true' allows-local-networking='true' />

<edit-config target="NSAllowsArbitraryLoads" file="*-Info.plist" mode="merge">

<true />

</edit-config>

<plugin name="cordova-plugin-transport-security" source="npm" />

Ошибка:

[blocked] The page at https://somewebpage was not allowed to run insecure content from http://127.0.0.1:8080/javascripts/somejsfile.js.

ни один из них не работал. у кого-нибудь есть предложение?


person Keenan35i    schedule 26.10.2018    source источник


Ответы (3)


Это не проблема безопасности транспорта приложений, это нарушение политики смешанного контента. Решение:

Для Android: отключите политику смешанного содержимого, поместив следующий код в метод pluginInitialize вашего плагина Cordova:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            final WebSettings settings = ((WebView)this.webView.getView()).getSettings();
      settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        } 

https://developer.android.com/reference/android/webkit/WebSettings.html#MIXED_CONTENT_ALWAYS_ALLOW)

Затем включите локальный cordova.js, используя:

<script src="cdvfile://localhost/assets/www/cordova.js"></script>

Для ios: я отправил PR файловому плагину, который решает проблему смешанного содержимого на ios: apache/cordova-plugin-file#296 Исправленная версия доступна по адресу: https://github.com/guylando/cordova-plugin-file Если вы загружаете удаленный сайт https://example.com в веб-просмотре, то он позволяет получить доступ к локальным файлам с помощью URL-адреса: https://example.com/cdvfile/bundle/www/cordova.js вместо cdvfile://localhost/bundle/www/cordova.js И тем самым решает проблемы смешанного контента

Включите локальный cordova.js, используя:

<script src="/cdvfile/bundle/www/cordova.js"></script>
person Guy L.    schedule 03.03.2019
comment
Это похоже на хорошее решение, я попробую, спасибо! - person Keenan35i; 05.03.2019
comment
На самом деле это не работает, я что-то пропустил? я включил вашу версию файлового плагина, в моем браузере приложения я включил ресурс js https://myhosturl/cdvfile/bundle/www/cordova.js, например, и он вернулся с 404 не найден. - person Keenan35i; 05.03.2019
comment
@Keenan35i это тег, который я включаю, который работает: ‹script src=/cdvfile/bundle/www/cordova.js›‹/script› - person Guy L.; 06.03.2019
comment
Также это только для ios. Для Android после отключения политики смешанного содержимого используйте: ‹script src=cdvfile://localhost/assets/www/cordova.js›‹/script› активы уведомления вместо пакета - person Guy L.; 06.03.2019
comment
Я использую его внутри Cordova UIWebView, который перемещается по удаленному URL-адресу. Я не использовал его из плагина inappbrowser. - person Guy L.; 06.03.2019
comment
Если он по-прежнему не работает на ios, откройте файл CDVFile.m в xcode и поставьте точку останова в методе canInitWithRequest, чтобы увидеть, почему этот URL-адрес не обрабатывается плагином. - person Guy L.; 06.03.2019
comment
Я также использую плагин wkwebview, это тоже может быть проблемой, нет? - person Keenan35i; 06.03.2019
comment
WKWebView запрещает доступ к локальным файлам, но это можно включить с помощью параметра представления allowFileAccessFromFileURLs, см.: stackoverflow.com/questions/35554814/ - person Guy L.; 06.03.2019
comment
поставьте точку останова там, где я сказал, и это поможет понять, доходит ли поток кода до обработки файла или нет, и поможет понять, в чем проблема, а не гадать - person Guy L.; 06.03.2019

Другое решение для Android, которое не меняет настройки безопасности браузера, заключается в использовании "https://cdvfile/assets/www/cordova.js" вместо "cdvfile://localhost/assets/www/cordova.js" и добавлении следующей строки в метод remapUri в FileUtils.java (в плагине файла Cordova):

uri = Uri.parse(uri.toString().replace("https://cdvfile/", "cdvfile://localhost/"));

Это загрузит файл как обычно и не заставит веб-просмотр блокировать запрос.

См. PR https://github.com/apache/cordova-plugin-file/pull/322

person syonip    schedule 29.05.2019

добавить в config.xml :

<allow-navigation href="*" />
<access origin="*" />"
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />

и добавьте в index.html политику безопасности контента.

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'; img-src * data: 'unsafe-inline'; connect-src * 'unsafe-inline'; frame-src *;">
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file:; style-src 'self' 'unsafe-inline' *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *"> 

и не забудьте добавить этот плагин cordova-plugin- белый список для вашего проекта

person Younes Zaidi    schedule 29.10.2018
comment
у меня уже есть все эти вещи, немного другая политика безопасности контента, но я пошел дальше и изменил ее, чтобы она соответствовала вашей, но все еще имеет ту же ошибку. - person Keenan35i; 29.10.2018