1. 程式人生 > >iOS 9學習系列:如何使用ATS提高應用的安全性

iOS 9學習系列:如何使用ATS提高應用的安全性

原文連結:http://www.cocoachina.com/ios/20150821/13140.html

iOS-9-iPhone-iPad.jpg

在過去幾年中,對web安全的注意和它的重要性都在充分的穩定增長。在今年的WWDC大會上,Apple明確表示了它打算以身作則的通過一個新特性來提高作業系統的安全性,它就是App Transport Security.

當然,一個平臺的安全性跟它的各個元件以及包括的第三方應用的安全效能息息相關。換句話說,Apple期望開發者們在他們的應用中使用App Transport Security.

在這篇文章中,我會解釋App Transport Security帶來了什麼,它怎樣影響你的應用程式,以及你可以怎樣更新你的應用來遵循Apple的指南和建議。

什麼是 App Transport Security?

App Transport Security,簡短的說就是ATS,是iOS9和OS X El Capitan的一個新特性。儘管Apple沒有提到watchOS,我們可以推測 App Transport Security 也同樣適用於watchOS 2.App Transport Security 的目標是提高Apple 作業系統的安全性以及在此作業系統上執行的任何應用的安全性。

基於HTTP傳輸資料的網路請求都是明文。不言而喻的這會引起相當大的安全風險。Apple強調每個開發者都應該致力於保證客戶的資料都是安全的,儘管那些資料可能看起來並不是很重要或者很敏感。

App Transport Security 通過強力推行一系列的最好的安全實際操作來積極地促進安全性,最重要的一個就是要求網路請求必須在一個安全的連結上傳輸。開啟App Transport Security後,網路傳輸自動通過HTTPS傳輸而不是HTTP.

還有一系列其他的要求來進一步提高安全效能。例如,App Transport Security要求TLS (Transport Layer Security) 1.2或者更高。可能你並不是很瞭解 TLS,但我保證你肯定聽過SSL (Secure Sockets Layer)。TLS是SSL的繼承人,它是一系列加密協議的集合用來加強在網路連線上的安全性。

Apple最近發表了一篇公開的,先導篇的文章?technote about App Transport Security,給了開發者們一個機會去研究 App Transport Security。這篇文章列出了 App Transport Security 期望從你的應用和與應用互動的網路服務中得到的東西。

例外

等一下。我的應用使用的是我沒有許可權控制的CDN (Content Delivery Network)而且它不支援HTTPS。別擔心,Apple都替你考慮好了。關於App Transport Security,每個應用都屬於4個大類當中的一類。我們來看看每一個大類都是怎樣影響應用的。

只有HTTPS

如果你的應用只基於支援HTTPS的伺服器,那麼你太幸運了。你的應用不需要做任何改變。但是,注意App Transport Security要求TLS 1.2而且它要求站點使用支援forward secrecy協議的密碼。證書也要求是符合ATS規格的。因此慎重檢查與你的應用互動的伺服器是不是符合ATS的要求非常重要。

混合

你的應用與一個不符合ATS要求的伺服器工作是很有可能的。在這種情況下,你需要告訴作業系統哪些站點是涉及到的然後在你的應用的 Info.plist檔案中指明哪些要求沒有達到。

這意味著對於每個與你應用互動的站點, 除了在你的應用的 Info.plist中宣告的那些以外不強制要求App Transport Security,其它的都需要。你可以使用很多的預定義的keys值來配置例外(exceptions)。在下面的 Info.plist檔案中,我們定義了3個例外。
001.jpg

api.insecuredomain.com

我們定義的第一個例外告訴ATS當與這個子域互動的時候撤銷了必須使用HTTPS的要求。注意這個僅僅針對在例外中聲明瞭的子域。非常重要的一點是要理解NSExceptionAllowsInsecureHTTPLoads關鍵字並不僅僅只是與使用HTTPS相關。這個例外指明瞭對於那個域名,所有的App Transport Security的要求都被撤銷了。

cdn.domain.com

很可能你的應用是與一個支援HTTPS傳輸資料的伺服器互動,但是並沒有使用TLS 1.2或更高。在這種情況下,你定義一個例外,它指明應該使用的最小的TLS的版本。這比完全撤銷那個域名的App Transport Security要更好更安全。

thatotherdomain.com

NSIncludesSubdomains關鍵字告訴 App Transport Security這個例外適用於這個特定域名的所有子域。這個例外還進一步通過擴充套件可接受的密碼列表來定義這個域名可以使用不支援forward secrecy(NSExceptionRequiresForwardSecrecy) ?協議的密碼。想了解更多關於forward secrecy的資訊,我推薦你去看這個文章?Apple's technote

撤銷

如果你在建立一個網頁瀏覽器,那麼你有一個更大的麻煩。因為你不可能知道你的使用者將要訪問那個網頁,你不可能指明這些網頁是否支援ATS要求且在HTTPS上傳輸。在這種情況下,除了全部撤銷 App Transport Security 沒有其它辦法。

非常重要的是你要明確的指明撤銷 App Transport Security。牢記App Transport Security是預設強制執行的。在你的應用的Info.plist, 檔案中,為NSAppTransportSecurity關鍵值新增一個字典。這個字典應該包括一個關鍵字,NSAllowsArbitraryLoads,以及它的值要被設定為YES。如果你撤消了App Transport Security,下面內容就是你的應用的 Info.plist 檔案應該看起來像的東西:
02.jpg

有著例外的撤銷

第四個大類是當你的應用撤消了App Transport Security,,但同時定義了一些例外。這非常有用就是當你的應用從很多的伺服器上取資料,但是也要與一個你可控的API互動。在這種情況下,在應用的Info.plist檔案中指定任何載入都是被允許的,但是你也指定了一個或多個例外來表明哪些是必須要求 App Transport Security的。下面是Info.plist檔案應該會有的內容:
123.jpg

時間

Apple強調如果應用是建於iOS9 或者 OS X El Capitan,那麼它們自動的加入 App Transport Security 。這意味著只要你的應用建於 iOS 8或OS X Yosemite上,你不需要對你的應用做任何改變。

基於以前釋出的iOS和OSX X系統的經驗,我們瞭解到Apple在釋出了官方版本後不久就要求開發者們使用最新的SDK來建立應用。換句話說,即便你不想在今年末當iOS 9 和OS X El Capitan 釋出的時候遵守App Transport Security ,很有可能蘋果會在2016年的第一或第二季度要求開發者們基於最新的SDK來開發應用。因此我推薦你儘早研究App Transport Security 將會對你的應用帶來的影響。

總結

我希望這篇文章清楚地講明瞭App Transport Security並不是那些哪天採用都無所謂的技術。它跟之前Apple要求所有應用都支援64位一樣,遲早要全部採用。除非你的應用只跟基於HTTPS傳輸協議遵循ATS要求的伺服器互動,你需要花些時間研究清楚App Transport Security將會怎樣影響到你的應用。Apple的這篇文章technote about App Transport Security可以幫助到你。
推薦閱讀:蘋果新『應用通訊安全』的理解和使用


相關推薦

iOS 9學習系列如何使用ATS提高應用安全性

原文連結:http://www.cocoachina.com/ios/20150821/13140.html 在過去幾年中,對web安全的注意和它的重要性都在充分的穩定增長。在今年的WWDC大會上,Apple明確表示了它打算以身作則的通過一個新特性來提高作業系統

9】Caffe學習系列執行caffe自帶的兩個簡單例子

為了程式的簡潔,在caffe中是不帶練習資料的,因此需要自己去下載。但在caffe根目錄下的data資料夾裡,作者已經為我們編寫好了下載資料的指令碼檔案,我們只需要聯網,執行這些指令碼檔案就行了。 注意:在caffe中執行所有程式,都必須在根目錄下進行,即/caffe,否則會出錯,因為指令碼檔案

.Net語言 APP開發平臺——Smobiler學習日誌在手機應用開發中如何實現跳轉地圖

demo hand 操作 窗體 clas com ps1 ati void 一、目標樣式 我們要實現上圖中的效果,需要如下的操作: 二、跳轉地圖代碼 VB: Private Sub Button1_Click(sender As Object, e As Ev

深入Java集合學習系列HashSet的實現原理

是否 abstract arc html 源代碼 cat param body static 0.參考文獻 深入Java集合學習系列:HashSet的實現原理 1.HashSet概述:   HashSet實現Set接口,由哈希表(實際上是一個HashMap實例)支持。它

OpenCV學習系列

最近需要對資料進行擴增以獲得更為豐富的資訊,就來了解一下OpenCV。以後每天會寫一點自己的學習要點: 1、對影象進行操作需要先獲取影象的畫素值矩陣,用cv2.imread('xxx.jpg')函式來獲取一個影象的畫素矩陣: >>> import cv2 >>&

機器學習系列k 近鄰法(k-NN)的原理及實現

  本內容將介紹機器學習中的 k k k 近鄰法(

【14】Caffe學習系列計算圖片資料的均值

圖片減去均值後,再進行訓練和測試,會提高速度和精度。因此,一般在各種模型中都會有這個操作。 那麼這個均值怎麼來的呢,實際上就是計算所有訓練樣本的平均值,計算出來後,儲存為一個均值檔案,在以後的測試中,就可以直接使用這個均值來相減,而不需要對測試圖片重新計算。 一、二進位制格式的均值計算

【13】Caffe學習系列資料視覺化環境(python介面)配置

caffe程式是由c++語言寫的,本身是不帶資料視覺化功能的。只能藉助其它的庫或介面,如opencv, python或matlab。更多人會使用python介面來進行視覺化,因為python出了個比較強大的東西:ipython notebook, 現在的最新版本改名叫jupyter notebook

【12】Caffe學習系列訓練和測試自己的圖片

一、準備資料 有條件的同學,可以去imagenet的官網http://www.image-net.org/download-images,下載imagenet圖片來訓練。驗證碼始終出不來需要翻牆(是google網站的驗證碼)。但是我沒有下載,原因是資料太大了。。。 我去網上找了一些其它的圖片

【11】Caffe學習系列影象資料轉換成db(leveldb/lmdb)檔案

在深度學習的實際應用中,我們經常用到的原始資料是圖片檔案,如jpg,jpeg,png,tif等格式的,而且有可能圖片的大小還不一致。而在caffe中經常使用的資料型別是lmdb或leveldb,因此就產生了這樣的一個問題:如何從原始圖片檔案轉換成caffe中能夠執行的db(leveldb/lmdb)

【10】Caffe學習系列命令列解析

caffe的執行提供三種介面:c++介面(命令列)、python介面和matlab介面。本文先對命令列進行解析,後續會依次介紹其它兩個介面。其實大部分情況下我們會使用python介面進行呼叫,當然caffe提供了C++命令列介面,還是有必要了解一下。命令列引數有個優點是支援多GPU執行。 caf

【8】Caffe學習系列solver優化方法

上文提到,到目前為止,caffe總共提供了六種優化方法: Stochastic Gradient Descent (type: "SGD"), AdaDelta (type: "AdaDelta"), Adaptive Gradient (type: "AdaGrad"),

【7】Caffe學習系列solver及其配置

solver算是caffe的核心的核心,它協調著整個模型的運作。caffe程式執行必帶的一個引數就是solver配置檔案。執行程式碼一般為 $ caffe train --solver=*_slover.prototxt 在Deep Learning中,往往loss function是非凸的

【6】Caffe學習系列Blob,Layer and Net以及對應配置檔案的編寫

深度網路(net)是一個組合模型,它由許多相互連線的層(layers)組合而成。Caffe就是組建深度網路的這樣一種工具,它按照一定的策略,一層一層的搭建出自己的模型。它將所有的資訊資料定義為blobs,從而進行便利的操作和通訊。Blob是caffe框架中一種標準的陣列,一種統一的記憶體介面,它詳細

【5】Caffe學習系列其它常用層及引數

本文講解一些其它的常用層,包括:softmax_loss層,Inner Product層,accuracy層,reshape層和dropout層及其它們的引數配置。 1、softmax-loss softmax-loss層和softmax層計算大致是相同的。softmax是一個分類器,計算的

【4】Caffe學習系列啟用層(Activiation Layers)及引數

在啟用層中,對輸入資料進行啟用操作(實際上就是一種函式變換),是逐元素進行運算的。從bottom得到一個blob資料輸入,運算後,從top輸入一個blob資料。在運算過程中,沒有改變資料的大小,即輸入和輸出的資料大小是相等的。 輸入:n*c*h*w 輸出:n*c*h*w 常用的啟用函式有

【3】Caffe學習系列視覺層(Vision Layers)及引數

所有的層都具有的引數,如name, type, bottom, top和transform_param. 本文只講解視覺層(Vision Layers)的引數,視覺層包括Convolution, Pooling, Local Response Normalization (LRN),

【2】Caffe學習系列資料層及引數

要執行caffe,需要先建立一個模型(model),如比較常用的Lenet,Alex等, 而一個模型由多個屋(layer)構成,每一屋又由許多引數組成。所有的引數都定義在caffe.proto這個檔案中。要熟練使用caffe,最重要的就是學會配置檔案(prototxt)的編寫。 層有很多種型別,

Http介面系列如何提高Http介面用例的資料穩定性

此文已由作者王婷英授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 為了儘可能多的釋放手工測試,提高測試效率,我們都會想到使用自動化測試,如http介面自動化測試、doubbo介面自動化測試、UI自動化測試等一系列的自動化測試。讓我們覺得原來自動化測試的種類也是多彩多姿的。 當前自

Caffe學習系列啟用層(Activiation Layers)及引數

在啟用層中,對輸入資料進行啟用操作(實際上就是一種函式變換),是逐元素進行運算的。從bottom得到一個blob資料輸入,運算後,從top輸入一個blob資料。在運算過程中,沒有改變資料的大小,即輸入和輸出的資料大小是相等的。 輸入:n*c*h*w 輸出:n*c*h*w