Jee*_*eef 1425 xcode ios ios9 app-transport-security ios10
info.plist
根据以下错误消息,我需要在我的设置中启用HTTP模式?
传输安全性阻止了明文HTTP(http://)资源加载,因为它不安全.可以通过应用程序的Info.plist文件配置临时例外.
假设我的域名是example.com
.
Use*_*231 934
使用:
您必须在.plist文件中的NSAppTransportSecurity字典下将NSAllowsArbitraryLoads键设置为YES.
Wil*_*iuk 823
以下是视觉设置:
KML*_*ong 710
请参阅论坛帖子Application Transport Security?.
此页面还在iOS 9和OSX 10.11中配置App Transport Security Exceptions.
例如,您可以添加特定域,例如:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.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>
Run Code Online (Sandbox Code Playgroud)
懒惰的选择是:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
info.plist
是一个XML文件,因此您可以将此代码或多或少地放在文件中的任何位置.
Ani*_*mar 428
如果您使用的是Xcode 8.0和Swift 3.0或Swift 2.2甚至是Objective C:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
Sou*_*ter 325
这已经过测试,正在使用iOS 9 GM种子 - 这是允许特定域使用HTTP而不是HTTPS的配置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key> <!--Include your domain at this line -->
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
NSAllowsArbitraryLoads
必须是false
,因为它不允许所有不安全的连接,但例外列表允许连接到没有HTTPS的某些域.
Jul*_*ról 144
这是一个快速解决方法(但不建议)在plist中添加它:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
这意味着(根据Apple的文档):
NSAllowsArbitraryLoads
一个布尔值,用于为NSExceptionDomains字典中未列出的任何域禁用App Transport Security.列出的域使用为该域指定的设置.默认值NO需要所有连接的默认App Transport Security行为.
我真的推荐链接:
这有助于我理解原因和所有影响.
下面的XML(在文件Info.plist中)将:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
禁止对所有页面进行任意调用,但是为了PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
允许该连接使用HTTP协议.
在上面的XML中,您可以添加:
<key>NSIncludesSubdomains</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
如果要为指定地址的子域允许不安全的连接.
最好的方法是阻止所有任意加载(设置为false)并添加异常以仅允许我们知道的地址正常.
2018年更新:
Apple不建议将其关闭 - 更多信息可以在207会话WWDC 2018中找到,其中有更多关于安全性的解释
出于历史原因和发展阶段留下原始答案
why*_*ite 115
对于那些想要了解为什么会发生这种情况的更多背景的人,除了如何修复它之外,请阅读以下内容.
随着iOS 9的推出,为了提高应用程序和Web服务之间连接的安全性,应用程序与其Web服务之间的安全连接必须遵循最佳实践.App Transport Security强制执行最佳实践行为:
如App Transport Security Technote中所述,在与您的Web服务进行通信时,App Transport Security现在具有以下要求和行为:
- 服务器必须至少支持传输层安全性(TLS)协议版本1.2.
- 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表.)
- 证书必须使用SHA256或更好的签名哈希算法进行签名,使用2048位或更高的RSA密钥或256位或更高的椭圆曲线(ECC)密钥.
- 无效的证书导致硬故障并且没有连接.
换句话说,您的Web服务请求应该:a.)使用HTTPS和b.)使用TLS v1.2加密并具有前向保密性.
但是,正如其他帖子中所提到的,您可以通过在应用程序中指定不安全域来覆盖App Transport Security中的这种新行为Info.plist
.
要覆盖,您需要将NSAppTransportSecurity
> NSExceptionDomains
字典属性添加到您的Info.plist
.接下来,您将Web服务的域添加到NSExceptionDomains
字典中.
例如,如果我想绕过主机www.yourwebservicehost.com上的Web服务的App Transport Security行为,那么我将执行以下操作:
在Xcode中打开您的应用程序.
Info.plist
在Project Navigator中找到该文件,然后单击"右键单击"并选择" 打开方式" >" 源代码"菜单选项.属性列表文件将显示在右侧窗格中.
将以下属性块放在主属性字典中(在第一个下面<dict>
).
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
如果您需要为其他域提供例外,那么您将在下面添加另一个字典属性NSExceptionDomains
.
要了解有关上述键的更多信息,请阅读此已提及的技术说明.
Vin*_*ent 67
我不喜欢直接编辑plist.您可以使用GUI轻松地将其添加到plist:
现在更改主区域中的数据:
Add Row
Jay*_*bey 25
有两种解决方案:
解决方案1:
Info.plist
文件中添加一个带键' NSAppTransportSecurity
' 的字典'Allow Arbitrary Loads'
Plist
结构应如下图所示.
解决方案2:
Info.plist
文件中添加一个带键' NSAppTransportSecurity
' 的字典NSExceptionDomains
' 在字典中添加另一个元素'MyDomainName.com'
NSDictionary类型的键添加元素NSIncludesSubdomains
类型Boolean
和值设置为的键' '的元素YES
NSTemporaryExceptionAllowsInsecureHTTPLoads
类型Boolean
和值设置为的键' '的元素YES
Plist
结构应如下图所示.
解决方案2是优选的,因为它仅允许选择的域,而解决方案1允许所有不安全的HTTP连接.
Mal*_*hla 20
iOS 9.0或更高版本提供传输安全性.尝试在应用程序中调用WS时,您可能会收到此警告:
Application Transport Security已阻止明文HTTP(http://)资源加载,因为它不安全.可以通过应用程序的Info.plist文件配置临时例外.
将以下内容添加到Info.plist将禁用ATS:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
小智 13
转到您的Info.plist
eco*_*tax 11
确定要使用的设置可以自动执行,如本技术说明中所述:
/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
Run Code Online (Sandbox Code Playgroud)
gna*_*729 11
根据Apple的说法,除非你有充分的理由这样做,否则一般禁用ATS会导致拒绝应用.即使这样,您也应该为可以安全访问的域添加例外.
Apple有一个很好的工具,可以准确地告诉您要使用的设置:在终端中输入
/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
Run Code Online (Sandbox Code Playgroud)
并且nscurl将检查此请求是否失败,然后尝试各种设置并告诉您确切的通过哪个,以及做什么.例如,对于我访问的某些第三方URL,此命令告诉我该字典通过:
{
NSExceptionDomains = {
"www.example.com" = {
NSExceptionRequiresForwardSecrecy = false;
};
};
}
Run Code Online (Sandbox Code Playgroud)
要区分您自己的站点和不受控制的第三方站点,请使用密钥NSThirdPartyExceptionRequiresForwardSecrecy.
Obj*_*eTC 10
注意:plist中的异常域应为LOWER-CASE.
示例:您已在设置 - >共享下为您的机器命名为"MyAwesomeMacbook"; 您的服务器(用于测试目的)在MyAwesomeMacbook.local:3000上运行,您的应用需要向http://MyAwesomeMacbook.local:3000/files ... 发送请求,您的plist需要指定"myawesomemacbook".本地"作为例外域名.
-
您的info.plist将包含...
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>myawesomemacbook.local</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
Far*_*ris 10
在swift 4和xocde 10中,将NSAllowsArbitraryLoads更改为Allow Arbitrary Loads。因此它将看起来像这样:
<key>App Transport Security Settings</key>
<dict>
<key>Allow Arbitrary Loads</key><true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
小智 9
在2015-09-25(2015-09-18 Xcode更新后):
我使用了非惰性方法,但它没有用.以下是我的尝试.
第一,
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.xxx.yyy.zzz</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
第二,
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.xxx.yyy.zzz</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
最后,我使用了懒惰的方法:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Run Code Online (Sandbox Code Playgroud)
它可能有点不安全,但我找不到其他解决方案.
使用:
在类型为Dictionary的plist文件中添加一个新项NSAppTransportSecurity,然后在Boolean类型的字典中添加子项NSAllowsArbitraryLoads,并设置bool值YES.这适合我.
值得一提的是如何到达那里......
Info.plist是Main.storyboard或viewController.swift下面的文件之一.
当你第一次点击它时,它通常是一种表格格式,所以右键单击文件并"打开"为源代码,然后在下面添加代码,即:
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
Run Code Online (Sandbox Code Playgroud)
复制粘贴上面的代码
"</dict>
</plist>"
Run Code Online (Sandbox Code Playgroud)
这是最后的.
Xcode 7.1的更新,面临问题27.10.15:
Info.plist中的新值是"App Transport Security Settings".从那里,这本词典应该包含:
小智 5
对于那些来到这里试图找到 WKWebView 始终为白色并且不加载任何内容的原因的人(完全按照此处所述How do I get WKWebView to work in swift and for an macOS App):
\n\n如果上述所有火箭科学对您不起作用,请检查明显的内容:沙箱设置
\n\n\n\n作为 swift 和 cocoa 的新手,但在编程方面非常有经验,我花了大约 20 个小时来找到这个解决方案。几十个时髦的 iOS 教程和苹果主题演讲 \xe2\x80\x93 都没有提到这个小复选框。
\n许多答案(包括已接受的答案)都告诉您要使您的应用程序的网络通信完全不安全!通过设置Allow Arbitrary Loads
为Yes
(或true
)。这是网络请求最危险的设置!它仅用于测试和临时目的。
您可以在 WWDC18 中看到这位 Apple 工程师在此处清楚地说明了这一点,即使对于 Web 内容,您也正试图允许它们全部使用!
Allow Arbitrary Loads
为NO
!!!您必须始终HTTPS
用于您的网络内容。但如果你真的不能,只需添加一个例外info.plist
例如,如果您正在使用http://google.com
并收到该错误,您必须将其更改为https://google.com
(with s ),因为它支持完美。
但是,如果您不能以某种方式(并且您无法说服后端开发人员支持 SSL),请将这个不安全的域添加到info.plist
(而不是使其可用于所有不安全的网络!)
归档时间: |
|
查看次数: |
740088 次 |
最近记录: |