如何将NSAppTransportSecurity添加到Cordova项目中

4

我正在处理一个ionic cordova项目。该应用程序需要为iOS 9版本配置App Transport Security Exceptions。

有人知道如何将以下配置添加到cordova项目配置文件中吗?(config.xml)

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

敬礼,


请查看此答案:https://dev59.com/El0Z5IYBdhLWcg3wphsE - manman
4个回答

9

最简单的解决方案可能是使用插件。可以查看cordova-plugin-transport-security插件。

cordova plugin add cordova-plugin-transport-security --save

你可以从它的plugin.xml文件中看到它如何修改plist值。

<platform name="ios">
  <config-file target="*-Info.plist" parent="NSAppTransportSecurity">
      <dict>
          <key>NSAllowsArbitraryLoads</key>
          <true/>
      </dict>
  </config-file>
</platform>

7

参考白名单指南,应该通过添加来实现

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

添加到你的config.xml文件中。


3

您可以使用edit-config标签直接在config.xml中更新应用程序的Info.plist文件中的属性。

这类似于Connor的回答,但允许更一般地控制您的应用程序配置。

对于这种特定情况,您可以包含以下内容(将${APP_NAME}替换为您的应用程序名称,毫不意外):

  <edit-config file="${APP_NAME}/${APP_NAME}-Info.plist" target="NSAppTransportSecurity" mode="merge">
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <false/>
    </dict>
  </edit-config>

0

我一直使用 Hook 脚本和 plistbuddy 来完成这个任务。所以我会把它放在 hooks 文件夹中,并确保它具有可执行文件权限(755 就可以):

    #!/bin/bash

echo "Adjusting plist for App Transport Security exception."
val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSExceptionDomains:DOMAIN_TO_SET_AS_EXCEPTION:NSTemporaryExceptionAllowsInsecureHTTPLoads bool true" platforms/ios/HelloCordova/HelloCordova-Info.plist 2>/dev/null)
echo "Done"

将 "DOMAIN_TO_SET_AS_EXCEPTION" 替换为您的域名,例如 myhost.example.com - 我不喜欢在需要之前设置所有域名开放,建议采用白名单方法。

然后要使其生效,我修改 iOS 平台部分的 config.xml 如下:

    ...
<platform name="ios">
    <hook type="before_build" src="hooks/ios_ats.sh" />
    ...

我写了一篇博客文章,其中展示了这个问题,并附带了一个完整的示例项目,你可以从文章中链接到Github获取适当的脚本。


难道它不应该在手机上运行(而不是服务器上)吗? - user1697575
1
是的,它在手机上。使用钩子脚本在脚本化的 Cordova 构建命令期间设置它。这里没有服务器配置,不确定是什么让您认为有服务器配置。 - Simon Prickett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接