【问题标题】:iOS9 : App Transport Security inside .plist FrameworkiOS9:.plist 框架内的应用程序传输安全性
【发布时间】:2017-06-12 17:01:44
【问题描述】:

我创建了一个使用 NSURLSessionDataTask (HTTP) 向服务器发送请求的框架,但是每当我在示例应用程序中使用该框架时,它都会显示如下警告:

App Transport Security 已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用的 Info.plist 文件配置临时例外。

我尝试在 Framework .plist 中添加应用程序传输安全性,但仍然无法正常工作。但是,当我在框架外的 .plist 中添加应用程序传输安全性时,它会起作用。

这个问题有解决办法吗,谢谢

【问题讨论】:

  • 例外是授予您的应用程序,而不是特定框架。只需将其添加到您应用的 Info.plist 中即可。

标签: ios ios9.3 app-transport-security


【解决方案1】:

正如@EmilioPelaez 所说,应用程序控制 ATS 是否处于活动状态。如果您的框架执行了违反 ATS 规则的操作,则使用该框架的每个应用程序都需要添加适当的例外。

这种行为有充分的理由。以一个通用网络帮助框架为例,其中 URL 由调用应用程序提供给框架调用。该框架无法知道它是否需要 ATS。相反,如果框架中包含需要 ATS 异常的硬编码 URL,则调用应用程序开发人员应该意识到这一点,并且不应被框架开发人员添加异常的面孔所掩盖。作为开发人员,我想知道我使用的框架本质上是不安全的。如果您正在处理后一种情况,只需在您的框架文档中添加框架正常运行所需的异常。

此外,作为 ATS 的最佳做法,不要只是完全禁用它,还有一些特定的例外情况可用于通过仅禁用 ATS 要求的某些部分来最大程度地减少您的安全风险暴露对于特定的域。确保你这样做。此外,请了解 Apple 计划在 2016 年底要求对许多 ATS 例外进行说明,但目前已被推迟。如果您添加例外,您应该做好准备,当您将应用程序提交到 App Store 时,Apple 会询问您一个原因。它可能不应该是“因为堆栈溢出告诉我禁用所有 ATS”。

【讨论】:

    【解决方案2】:

    框架无法控制 ATS,但应用程序可以。所以你必须在你的文档中写下,应用开发者需要将 ATS 异常添加到他的应用中。

    也就是说,不要那样做。特别是如果你正在制作一个框架。花点时间为服务器添加 HTTPS 支持/联系服务器开发人员添加它。因为苹果很快就会停止支持 AllowArbitraryLoads / exceptions。因此,包含您的框架的应用程序将无法通过审核流程,除非提供他们需要这些例外的正当理由。 Apple 最初计划从 2017 年 1 月 1 日开始停止支持,但他们将其推迟了一段未知的时间。不过,他们总有一天会做到的。最好为未来做计划。

    附:如果您完全无法控制服务器,而服务器开发人员在火星上,并且您的框架确实需要与该服务器通信,那么应用程序开发人员可能会通过解释情况来通过审核(“无法控制server" 是 Apple Review 团队的一个正当理由),但他们每个人都必须一遍又一遍地做这件事,你必须在你的文档中解释如何去做以及说什么。所以切换到 HTTPS 更容易。

    【讨论】:

      【解决方案3】:

      在 info.plist 中添加 NSAllowsArbitraryLoads 作为 true 键以避免此问题。

      【讨论】:

      • 请不要在没有说明 Apple 将要求应用提供禁用 ATS 的理由的情况下推荐此解决方案。
      猜你喜欢
      • 2015-11-29
      • 2016-02-13
      • 2016-03-23
      • 2015-09-17
      • 2016-01-25
      • 2015-12-25
      • 2016-11-11
      • 1970-01-01
      • 2015-09-03
      相关资源
      最近更新 更多