当前位置: 首页 > 知识库问答 >
问题:

应用程序传输安全Xcode 7 beta 6

萧永长
2023-03-14

我目前正在开发Xcode7 beta6。我正在尝试向http://mysubdomain.herokuapp.com发送“删除”请求

App Transport Security已阻止明文HTTP(HTTP://)资源加载,因为它不安全。可以通过应用程序的info.plist文件配置临时异常
调用API时出错:Error Domain=nSURLERRORDOMAIN CODE=-1022无法加载资源,因为应用程序传输安全策略要求使用安全连接。
NsLocalizedDescription=无法加载资源,因为应用程序传输安全策略要求使用安全连接。,NsUnderlyingError=0x796F7EF0{Error Domain=KCFERRORDOMAINCFNetwork CODE=-1022“(null)”}}

在实际的API调用中,我使用了“https”而不是“http”,这实际上适用于POST请求。但DELETE请求会引发上述错误。

我在这里看到了涉及pList文件的解决方案,但没有一个对我有效。我在下面列出了我的尝试。

第一次尝试:

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

第二次尝试:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>herokuapp.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>herokuapp.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSRequiresCertificateTransparency</key>
                <false/>
                <key>NSTemporaryRequiresCertificateTransparency</key>
                <false/>
            </dict>
        </dict>
    </dict>
class func makeDELETEALLRequest(completion: (error:Bool) -> Void) {
        let session = NSURLSession.sharedSession()
        let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "DELETE"

        let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in

            if (error != nil) {
                print("Error making API call: \(error!)")
                completion(error: true)
            } else {
                let HTTPResponse = response as! NSHTTPURLResponse
                let statusCode = HTTPResponse.statusCode
                if (statusCode == 200){
                    print("Successfully deleted!")
                    completion(error: false)
                } else {
                    print("Different status code: \(statusCode)")
                    completion(error: true)
                }
            }
        }
        task.resume()
    }

我再次使用Xcode7 beta6。

关于我选择的答案,我选择为正确的答案对我是正确的,因为我在我的项目中对错误的pList文件做了所有这些更改,而这个答案是唯一一个解决了这种可能性的答案。其他答案提供的解决方案没有错,所以任何其他经历过这个问题的人都应该试一试,因为它们是有效的。我希望这能帮助任何有类似问题的人。

共有1个答案

岳安福
2023-03-14

在升级到Xcode7.0后,我也遇到了重写应用程序传输安全的问题,尝试了同样的解决方案,但没有任何效果。在离开它一段时间后,我注意到我在“MyAppName Tests”的支持文件下对info.plist进行了更改,而不是项目本身的更改。我的项目中的支持文件文件夹没有展开,所以我甚至没有注意到其中的info.plist。

典型的业余错误,我敢肯定,但在Project Navigator中,它们仅有几行相隔,这让我很沮丧,直到我注意到它们之间的区别。我想我应该提一下以防你也有同样的问题。

 类似资料:
  • “http://xx3.xx.xx8.xx7/xxx/xxx/error:无法加载资源,因为应用程序传输安全策略要求使用安全连接。” 这是我添加到plist的代码

  • 攻击者无时无刻不在准备对你的 Web 应用程序进行攻击,因此提高你的 Web 应用程序的安全性是非常有必要的。幸运的是,来自The Open Web Application Security Project (OWASP) 的有心人已经整理了一份包含了已知安全问题和防御方式的全面的清单。这份清单对于具有安全意识的开发者来说是必读的。由 Padraic Brady 整理的 Survive The D

  • 这是我的组件代码。 这是我的Info.plist代码“NSAPPTransportSecurity” 当我跑的时候 模拟器显示错误 怎么修?(使用RN 0.40版本)

  • 稳定性: 2 - 稳定的 tls 模块是对安全传输层(TLS)及安全套接层(SSL)协议的实现,建立在OpenSSL的基础上。 按如下方式引用此模块: const tls = require('tls'); TLS/SSL 概念 TLS/SSL 是 public/private key infrastructure (PKI),大部分情况下,每个服务器和客户端都应该有一个私钥。 私钥能有多种生成

  • 问题内容: 什么: NodeJS应用程序可以二进制形式分发吗?即。您通过V8将.js应用编译为其本机二进制文件,然后将该二进制文件分发给客户端?(如果您拥有对NodeJS服务器的全部访问权限)…还是正在缩小代码,您可以做些什么? 原因: 我们在NodeJS中为客户端构建服务器端应用程序,这些应用程序通常必须托管在客户端的服务器上。分发源代码意味着客户可以轻松地窃取我们的解决方案并停止支付许可费用。

  • 运行应用程序时的问题:在Consol屏幕中 java.lang.SecurityException:权限拒绝:starting Intent{act=Android.Intent.action.main cat=[Android.Intent.category.launcher]flg=0x10000000 cmp=com.test.sample/.setting}from null(PID=91