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


124

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

我似乎无法将其添加到我的info.plist中。没有任何价值。我正在运行XCode版本7.0 beta(7A121l),并在iOS9上进行测试。

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

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


您实际上不再有疑问,您应该继续回答自己的问题,然后在适当的时间延迟后接受。
诺曼H

什么是域名?这是服务器基本网址还是其他任何网址?在哪里可以找到我的应用域名?
Nik

域名是最常用的术语之一。好吧,这是一个要购买的东西,然后在托管后可以将其用作用于API的服务器基本URL。没有像应用程序域名那样的东西。因此,您可以将域名用作编写API的域名。
Ashish

Answers:


131

试试这个---在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。但这是行不通的。有什么线索吗?
Sanandrea '16

通常它确实可以工作...您可以在此处粘贴您的代码,然后我们可以看到
Ashish

而且,如果您有两个或多个domanis,则必须添加,<key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> 否则对我来说由于某种原因它不适用于发行版
P.Lorand

90

您只需在info.plist文件的NSAppTransportSecurity词典中将NSAllowsArbitraryLoads键添加到YES。

例如,

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

在此处输入图片说明


1
这是一种解决方法。真正的问题是
@Ashish

45

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

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

我认为您的意思<true/>不是<YES/>
Clifton Labrum 2015年

1
从安全的角度来看,这是一种正确的方法,而不是这样做,因为没有人会审阅这段代码并将其更新到正确指定的域。
igraczech 2015年

1
这不是一个好习惯。相反,我们应该允许特定的域。
Ashish

1
对于像我这样的其他新手:确保将其放置在正确的位置(最后,用现有的</dict></plist>标签括起来:
Pwdr



4

更新答案(在2016年wwdc之后):

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链接


在今年年底之后,不使用https的新应用或更新应用将被拒绝。带有旁路的现有应用程序呢?(我们需要强制更新吗?)
Paraneetharan Saravanaperumal

2
<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


感谢您提供显示如何添加多个域的示例。
AtheistP3ace

2
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

1

为了进一步解释ParaSara的答案:App Transport安全性成为强制性要求,尝试将其关闭可能会使您的应用被拒绝。

作为开发人员,如果您的网络代码不起作用,则可以关闭App Transport安全性,并且您想在解决任何问题之前继续进行其他开发。以五人一组为例,四个人可以继续从事其他工作,而一个人可以解决所有问题。如果遇到网络问题,并且要检查它们是否由App Transport安全性引起,则也可以关闭App Transport安全性作为调试工具。您一知道就应该立即将其重新打开。

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

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

但大多数情况下,请考虑以下几点:您正在危害客户的隐私。那是我书中的一大禁忌。不要那样做 修正您的代码,不要寻求运行不安全代码的许可。



1

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

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

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


1

XCODE 8,Swift 3:您需要添加一行:**

“应用程序传输安全设置”

信息属性列表中info.plist中的**。


0

Xcode 9.2,Swift 4,这对我有用。

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.