Cordova在应用浏览器中的App Transport Security

时间:2018-10-26 18:33:51

标签: ios cordova http inappbrowser app-transport-security

我正在尝试从本地服务器(使用httpd插件)在In App Browser中加载内容。网页来自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.
这些都不起作用。有人有建议吗?

3 个答案:

答案 0 :(得分:1)

这不是应用程序传输安全问题,它是违反混合内容政策的问题。 解决方案:

对于android:通过将以下代码放入cordova插件的pluginInitialize方法中来禁用混合内容策略:

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>

答案 1 :(得分:1)

另一种不更改浏览器安全设置的android解决方案是使用"https://cdvfile/assets/www/cordova.js"而不是"cdvfile://localhost/assets/www/cordova.js",并将以下行添加到{ {1}}(在cordova文件插件中):

remapUri

这将照常加载文件,并且不会导致网络视图阻止请求。

请参见PR https://github.com/apache/cordova-plugin-file/pull/322

答案 2 :(得分:0)

添加到 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-whitelist添加到您的项目