如何将 NSAppTransportSecurity 添加到我的 info.plist 文件中?

Posted

技术标签:

【中文标题】如何将 NSAppTransportSecurity 添加到我的 info.plist 文件中?【英文标题】:How can I add NSAppTransportSecurity to my info.plist file? 【发布时间】:2015-09-21 21:11:14 【问题描述】:

https://developer.apple.com/videos/wwdc/2015/?id=711@5:55

我似乎无法将此添加到我的 info.plist。没有它的价值。我正在运行 XCode 7.0 beta (7A121l),并在 ios9 上进行测试。

因为我无法在视频中明确声明我想要的 URL,所以我不断收到“App Transport Security 已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以配置临时异常通过您应用的 Info.plist 文件”错误。

但是,我似乎无法配置它。有什么想法吗?

【问题讨论】:

你真的没有问题了,你应该继续回答你自己的问题,然后在适当的时间延迟后接受。 什么是域名?这是服务器基础 url 还是其他?以及在哪里可以找到我的应用域名? 域名是最常用的术语之一。好吧,这是购买的,然后在托管后您可以将其用作用于 API 的服务器基础 url。没有像应用程序域名这样的东西。因此,您可以将域名用作编写 API 的地方。 【参考方案1】:

试试这个 --- 在 Xcode-beta 4 7.0 中为我工作

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <!--Include to allow subdomains-->
            <key>NSIncludesSubdomains</key>
            <true/>
            <!--Include to allow HTTP requests-->
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <!--Include to specify minimum TLS version-->
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>

还有一个选项,如果你想禁用 ATS,你可以使用这个:

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

但这根本不推荐。服务器应该有 SSL 证书,这样就不会泄露隐私。

【讨论】:

我有 XCode 7.2 (7C68) 并且我已经修改(通过完全禁用 ATS)我的测试项目的 info.plist。但它不起作用。有什么线索吗? 一般是可以的...你能把你的代码贴在这里然后我们可以看到 如果你有两个或更多的域名,你必须添加&lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt; &lt;true/&gt;&lt;key&gt;NSExceptionDomains&lt;/key&gt; 否则对我来说由于某种原因它不适用于发布版本【参考方案2】:

您必须在 info.plist 文件的 NSAppTransportSecurity 字典中将 NSAllowsArbitraryLoads 键添加为 YES。

例如,

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

【讨论】:

这是一种解决方法。真正的问题是@Ashish 的回答中的死亡【参考方案3】:

这对我不起作用,但这成功了:

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

【讨论】:

我认为您的意思是 &lt;true/&gt; 而不是 &lt;YES/&gt; 从安全的角度来看,这正是一种方法,如何不这样做,因为没有人会审查这部分代码并将其更新到正确指定的域。 这不是一个好习惯。相反,我们应该允许特定的域。 对于像我这样的其他新手:确保将其放在正确的位置(最后,由现有的 &lt;/dict&gt;&lt;/plist&gt; 标签括起来:【参考方案4】:

只是为了澄清...... 您应该始终使用 httpS

但你可以绕过它添加异常:

【讨论】:

【参考方案5】:

Xcode 8.2、iOS 10

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

【讨论】:

【参考方案6】:

更新答案(wwdc 2016 之后):

IOS apps will require secure HTTPS connections by the end of 2016

App Transport Security 或 ATS 是 Apple 在 iOS 9 中引入的一项功能。启用 ATS 后,它会强制应用通过 HTTPS 连接而不是不安全的 HTTP 连接到 Web 服务。

但是,开发人员仍然可以关闭 ATS 并允许他们的应用通过 HTTP 连接发送数据,如上述答案中所述。 2016 年底,Apple 将对所有希望将其应用提交到 App Store 的开发者强制执行 ATS。 link

【讨论】:

今年年底后,不使用https的新应用或更新应用将被拒绝。绕过现有的应用程序呢? (我们需要强制更新?)【参考方案7】:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>org</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

这将允许连接到 .com .net .org

【讨论】:

感谢您提供如何添加多个域的示例。【参考方案8】:
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

【讨论】:

【参考方案9】:

解释一下 ParaSara 的回答:App Transport 安全成为强制性的,尝试关闭它可能会导致您的应用被拒绝。

作为开发人员,如果您的网络代码无法使用应用传输安全性,并且您希望在解决任何问题之前继续其他开发,您可以关闭它。假设在一个五人团队中,四个人可以继续处理其他事情,而一个人可以解决所有问题。如果您遇到网络问题并且想要检查它们是否是由应用程序传输安全性引起的,您还可以将应用程序传输安全性作为调试工具关闭。一旦你知道你应该立即重新打开它。

你以后必须使用的解决方案是根本不使用http,除非你使用不支持https的第三方服务器。如果您自己的服务器不支持 https,Apple 就会遇到问题。即使有第三方服务器,我也不会打赌苹果会接受它。

与服务器安全的各种检查相同。在某些时候,Apple 只会接受合理的例外情况。

但大多数情况下,请考虑一下:您正在危及客户的隐私。在我的书中,这是一个很大的禁忌。不要那样做。修复您的代码,不要请求运行不安全代码的权限。

【讨论】:

【参考方案10】:

对于使用 NSAppTransportSecurity 的开发人员来说,一个坏消息。

UPDATE:
[Apple will require HTTPS connections for iOS apps by the end of 2016]

https://techcrunch.com/2016/06/14/apple-will-require-https-connections-for-ios-apps-by-the-end-of-2016/

【讨论】:

【参考方案11】:

在 mac shell 命令行中,使用以下命令:

plutil -insert NSAppTransportSecurity -xml "<array><string> hidden </string></array>" [location of your xcode project]/Info.plist 

该命令会将所有必要的值添加到您的 plist 文件中。

【讨论】:

【参考方案12】:

XCODE 8,斯威夫特 3: 需要添加一行:**

“应用传输安全设置”

**在info.plist里面的信息属性列表。

【讨论】:

【参考方案13】:

使用您喜欢的任何编辑器打开项目的 info.plist 文件,然后将此代码添加到文件末尾的最后一个之前

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

【讨论】:

以上是关于如何将 NSAppTransportSecurity 添加到我的 info.plist 文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Qt如何将文字变成图片?

如何将Bitmap保存为本地图片文件?

在MATLAB中如何将图导出

ASP如何将SQLSERVER数据导出到DBF(VF)

如何将CSV格式转换成JSON格式