2016-06-28 34 views
0

我正在開發一個應用程序,它有一個小的調整。它會顯示給定網址的預覽(如Facebook,whatsapp)。但如果「用戶提供的」網址位於HTTP中,則在打開ATS時無法加載預覽。所以我通過使用NSAllowsArbitraryLoads關閉了整個HTTPS流量。有沒有什麼辦法允許啓用ATS的http?允許HTTP而不禁用iOS中的ATS

回答

0

According to Apple,如果您針對較舊的SDK構建了iOS 8或更早版本,則ATS將被禁用。我不知道這意味着什麼,但我猜測它是目標構建設置架構,基礎SDK - 而不是部署目標設置。

This video有最近在WWDC 2016年宣佈更改ATS的細節,2017年開始,蘋果將如果您使用以下任一ATS例外拒絕您的應用程序你不能提供合理的這樣做的理由:

  • NSAllowsArbitraryLoads
  • NSExceptionAllowsInsecureHTTPLoads
  • NSExceptionMinimumTLSVersion

但是,看來你被允許使用一個名爲新的異常:

  • NSAllowsArbitraryLoadsInWebContent

這意味着一個WKWebView控制仍然可以加載HTTP內容。不知道這是否也適用於UIWebView。

就你而言,我猜你沒有使用WKWebView,所以你最好開始研究你的「合理理由」。或者堅持使用iOS 8 SDK。

+0

你打算如何生成預覽?使用WKWebView控件?如果是這樣,請等待Apple發佈NSAllowsArbitraryLoadsInWebContent並使用它。否則,您是否可以在服務器上生成預覽並將它們作爲圖像發送給您的應用程序? –

0

您可以添加例外(NSExceptionDomains)以允許特定域的HTTP。請參閱documentation

但是,如果用戶給出的URL可以是任何URL,那麼除了使用NSAllowsArbitraryLoads之外沒有別的辦法。

+0

我試過用burp代理攔截Facebook ios應用流量,流量正在通過HTTPS,但他們仍然顯示HTTP鏈接的預覽。他們沒有跳過ATS。這意味着有一些方法可以做到這一點。是不是? – Duke

+0

@Duke是的,有一種方法 - 使用'NSAllowsArbitraryLoads'。 – Code

+0

我試圖像Facebook那樣做。允許使用SSL的HTTP(ATS)。 – Duke

0

開放Info.plist源代碼,那麼您要補充一點:

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <false/> 
     <key>NSExceptionDomains</key> 
     <dict> 
      <key>aWebsite.com</key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
       <key>NSTemporaryExceptionMinimumTLSVersion</key> 
       <string>TLSv1.1</string> 
      </dict> 
      <key>anotherWebsiteIfYouWant.com</key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
       <key>NSTemporaryExceptionMinimumTLSVersion</key> 
       <string>TLSv1.1</string> 
      </dict> 
     </dict> 
    </dict> 

這樣你就不必完全禁用ATS。

+0

我們不知道用戶輸入。它可以是任何HTTP網址 – Duke

+0

對不起,我沒有注意到。你可以看到[這篇文章](http://stackoverflow.com/questions/15924921/how-to-write-to-appname-info-plist)如何在運行時寫入info.plist,但我不確定關於那... – AnthoPak