關(guān)于 iOS 10 中 ATS 的問題

WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推進網(wǎng)絡(luò)通訊安全的一個重要方式盼樟。在 iOS 9 和 OS X 10.11 中移迫,默認(rèn)情況下非 HTTPS 的網(wǎng)絡(luò)訪問是被禁止的。當(dāng)然榕酒,因為這樣的推進影響面非常廣范嘱,作為緩沖,我們可以在 Info.plist 中添加NSAppTransportSecurity字典并且將NSAllowsArbitraryLoads設(shè)置為YES來禁用 ATS漱凝。相信大家都已經(jīng)對這個非常熟悉了纸兔,因為我自己也維護了一些網(wǎng)絡(luò)相關(guān)的框架惰瓜,所以我還自己準(zhǔn)備了一個小腳本來快速關(guān)閉 ATS。

不過汉矿,WWDC 16 中崎坊,Apple 表示將繼續(xù)在 iOS 10 和 macOS 10.12 里收緊對普通 HTTP 的訪問限制。從 2017 年 1 月 1 日起洲拇,所有的新提交 app 默認(rèn)是不允許使用NSAllowsArbitraryLoads來繞過 ATS 限制的奈揍,也就是說,我們最好保證 app 的所有網(wǎng)絡(luò)請求都是 HTTPS 加密的赋续,否則可能會在應(yīng)用審核時遇到麻煩男翰。

本文寫作的時間點 (2016 年 6 月 17 日),這方面的相關(guān)規(guī)定和幾個事實如下纽乱。但是似乎 Apple 安全部門對現(xiàn)在的情況也有些內(nèi)部沖突蛾绎,所以不排除在正式版中發(fā)生改變的可能性。我也會對此繼續(xù)關(guān)注鸦列,并在需要的時候?qū)Ρ疚倪M行更新租冠。如果您發(fā)現(xiàn)了下面所述和事實不符的話,也歡迎留言提出薯嗤,我會進行修正顽爹。

默認(rèn)情況下你的 app 可以訪問加密足夠強 (TLSv1.2 以上,AES-128 和 SHA-2 以及 ECDHC 等) 的 HTTPS 內(nèi)容骆姐。這對所有的網(wǎng)絡(luò)請求都有效话原,包括NSURLSession,UIWebView以及WKWebView等诲锹。

你依然可以添加NSAllowsArbitraryLoads為YES來禁用 ATS繁仁,不過如果你這么做的話,需要在提交 app 時進行說明归园,為什么需要訪問非 HTTPS 內(nèi)容黄虱。一般來說,可能類似瀏覽器類的 app 比較容易能通過庸诱。

相比于使用NSAllowsArbitraryLoads將全部 HTTP 內(nèi)容開放捻浦,選擇使用NSExceptionDomains來針對特定的域名開放 HTTP 應(yīng)該要相對容易過審核∏潘“需要訪問的域名是第三方服務(wù)器朱灿,他們沒有進行 HTTPS 對應(yīng)”會是審核時的一個可選理由,但是這應(yīng)該只需要針對特定域名钠四,而非全面開放盗扒。如果訪問的是自己的服務(wù)器的話跪楞,可能這個理由會無法通過。

對于網(wǎng)頁瀏覽和視頻播放的行為侣灶,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent鍵甸祭。通過將它設(shè)置為YES,可以讓你的 app 中的WKWebView和使用AVFoundation播放的在線視頻不受 ATS 的限制褥影。這也應(yīng)該是絕大多數(shù)使用了相關(guān)特性的 app 的選擇池户。但是壞消息是這個鍵在 iOS 9 中并不會起作用。

總結(jié)一下就是凡怎,對于 API 請求校焦,基本上是必須使用 HTTPS 的,特別是如果你們自己可以管理服務(wù)器的話统倒≌洌可能需要后端的同學(xué)盡快升級到 HTTPS (不過話說雖然是用 Let's Encrypt 的,我一個個人博客都啟用 HTTPS 了檐薯,作為 API 的用戶服務(wù)器凝赛,還不開 HTTPS 真有點說不過去)。如果你的 app 只支持 iOS 10坛缕,并且有用戶可以自由輸入網(wǎng)址進行瀏覽的功能墓猎,或者是在線視頻音頻播放功能的話,簡單地加入NSAllowsArbitraryLoadsInWebContent赚楚,并且將組件換成WKWebKit或者AVFoundation就可以了毙沾。如果你還需要支持 iOS 9,并且需要訪問網(wǎng)頁和視頻的話宠页,可能只能去開啟NSAllowsArbitraryLoads然后提交時進行說明左胞,并且看 Apple 審核員的臉色決定讓不讓通過了。除了WKWebKit以外举户,另外一個訪問網(wǎng)頁的選擇是使用SFSafariViewController烤宙。因為其實SFSafariViewController就是一個獨立于 app 的 Safari 進程,所以它完全不受 ATS 的限制俭嘁。

另外躺枕,當(dāng)NSAllowsArbitraryLoads和NSAllowsArbitraryLoadsInWebContent同時存在時,根據(jù)系統(tǒng)不同供填,表現(xiàn)的行為也會不一樣拐云。簡單說,iOS 9 只看NSAllowsArbitraryLoads近她,而 iOS 10 會先看NSAllowsArbitraryLoadsInWebContent叉瘩。在 iOS 10 中,要是NSAllowsArbitraryLoadsInWebContent存在的話粘捎,就忽略掉NSAllowsArbitraryLoads薇缅,如果它不存在危彩,則遵循NSAllowsArbitraryLoads的設(shè)定。說起來可能有點復(fù)雜捅暴,我在這里總結(jié)了一下根據(jù)NSAppTransportSecurity中設(shè)定條件不同恬砂,所對應(yīng)的系統(tǒng)版本和請求組件的行為的不同咧纠,可以作為你設(shè)置這個字典時的參考蓬痒。

ATS 設(shè)定使用的組件iOS 9 HTTPiOS 10 HTTP備注

NSAllowsArbitraryLoads: NOUIWebView??

WKWebView??默認(rèn)行為

URLSession??

NSAllowsArbitraryLoads: YESUIWebView??禁用 ATS

WKWebView??審核時需要說明理由

URLSession??

NSAllowsArbitraryLoads: NO & NSAllowsArbitraryLoadsInWebContent: YESUIWebView??只對網(wǎng)頁內(nèi)容禁用 ATS

WKWebView??對于大多數(shù) app 的推薦做法,

URLSession??保證安全性

NSAllowsArbitraryLoads: NO & NSAllowsArbitraryLoadsInWebContent: NOUIWebView??

WKWebView??

URLSession??

NSAllowsArbitraryLoads: YES & NSAllowsArbitraryLoadsInWebContent: NOUIWebView??對于 iOS 10漆羔,

WKWebView??NSAllowsArbitraryLoadsInWebContent 存在時忽略 NSAllowsArbitraryLoads 的設(shè)置

URLSession??iOS 9 將繼續(xù)使用 NSAllowsArbitraryLoads

NSAllowsArbitraryLoads: YES & NSAllowsArbitraryLoadsInWebContent: YESUIWebView??對于 iOS 10梧奢,

WKWebView??NSAllowsArbitraryLoadsInWebContent 存在時忽略 NSAllowsArbitraryLoads 的設(shè)置

URLSession??iOS 9 將繼續(xù)使用 NSAllowsArbitraryLoads

該列表是根據(jù) Apple prerelease 的文檔中關(guān)于NSAppTransportSecurity和NSAllowsArbitraryLoadsInWebContent部分的描述作出的。現(xiàn)在 (2016.06.17) 的 iOS 10 beta 和 Xcode 8 beta 版本中NSAllowsArbitraryLoadsInWebContent似乎還不能正確工作演痒。在現(xiàn)在的 beta 版中亲轨,似乎只要存在NSAllowsArbitraryLoadsInWebContent,不論其設(shè)置如何鸟顺,WKWebView都不能加載惦蚊。如果這個行為發(fā)生了變化,或者上面的列表存在問題讯嫂,歡迎留言蹦锋,我會進行更正。

關(guān)于UIWebView是否也可以在NSAllowsArbitraryLoadsInWebContent為YES時訪問 HTTP欧芽,Apple 內(nèi)部似乎也在爭論莉掂,但是個人認(rèn)為是時候淘汰UIWebView了。如果沒有特殊的什么需求的話千扔,盡早將UIWebView全部換為WkWebView會是明智的選擇憎妙。

不得不說,Apple 使用自己現(xiàn)在的強勢地位曲楚,在推動技術(shù)進步上的做的努力是有目共睹的厘唾。不論是前幾天強制支持 IPv6,還是現(xiàn)在的 HTTPS龙誊,其實都不是很容易就能作出的決定抚垃。而為用戶構(gòu)建一個更安全的使用環(huán)境,可能不僅是 Apple 單方面可以做的载迄,也是需要開發(fā)者來配合的一件事情讯柔。盡快適配更進步和安全的使用方式,會是一件雙贏的事情护昧。


轉(zhuǎn)自https://onevcat.com/2016/06/ios-10-ats/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魂迄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惋耙,更是在濱河造成了極大的恐慌捣炬,老刑警劉巖熊昌,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異湿酸,居然都是意外死亡婿屹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門推溃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昂利,“玉大人,你說我怎么就攤上這事铁坎》浼椋” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵硬萍,是天一觀的道長扩所。 經(jīng)常有香客問我,道長朴乖,這世上最難降的妖魔是什么祖屏? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮买羞,結(jié)果婚禮上袁勺,老公的妹妹穿的比我還像新娘。我一直安慰自己哩都,他們只是感情好魁兼,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漠嵌,像睡著了一般咐汞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上儒鹿,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天化撕,我揣著相機與錄音,去河邊找鬼约炎。 笑死植阴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的圾浅。 我是一名探鬼主播掠手,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狸捕!你這毒婦竟也來了喷鸽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灸拍,失蹤者是張志新(化名)和其女友劉穎做祝,沒想到半個月后砾省,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡混槐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年编兄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声登。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡狠鸳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捌刮,到底是詐尸還是另有隱情碰煌,我是刑警寧澤舒岸,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布绅作,位于F島的核電站,受9級特大地震影響蛾派,放射性物質(zhì)發(fā)生泄漏俄认。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一洪乍、第九天 我趴在偏房一處隱蔽的房頂上張望眯杏。 院中可真熱鬧,春花似錦壳澳、人聲如沸岂贩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萎津。三九已至,卻和暖如春抹镊,著一層夾襖步出監(jiān)牢的瞬間锉屈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工垮耳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颈渊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓终佛,卻偏偏與公主長得像俊嗽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铃彰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推進網(wǎng)絡(luò)通訊安...
    MissLu16閱讀 1,055評論 0 3
  • 關(guān)于 iOS 10 中 ATS 的問題 本文于 2016 年 11 月 28 日按照 Apple 最新的文檔和 X...
    Lewis海閱讀 886評論 0 1
  • WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推進網(wǎng)絡(luò)通訊安...
    freemanIT閱讀 478評論 0 0
  • iOS 10 適配 ATS 一. HTTPS 其實HTTPS從最終的數(shù)據(jù)解析的角度绍豁,與HTTP沒有任何的區(qū)別,HT...
    made_China閱讀 1,705評論 0 12
  • 昨天進行了一次數(shù)學(xué)小測驗豌研,給孩子們打了等第妹田。能看得出來唬党,最近實行的小組合作起了一定的作用。至少懶惰的孩子被帶的并沒...
    Wendy噠噠閱讀 322評論 1 1