歡迎光臨
每天分享高質量文章

iOS 防止 Charles 抓取資料

作者:Maxdon
連結:https://www.jianshu.com/p/1ab83d726d3f


現在 APP 開發,資料的保密性越來越受重視,保密性高才不會讓資料輕易被洩露,同時保護到使用者和公司的利益。如何做到保密更加完善呢?怎麼防止 Charles 獲取資料呢?



1、透過 HTTP/1.1 及以上版本的 CONNECT 請求方式。CONNECT 請求方式是什麼呢?開發中我們多數用的是 POST 和 GET 來向服務端請求資料。


CONNECT 是在 HTTP/1.1 協議中,HTTP/1.0 定義了三種請求方法: GET, POST 和 HEAD方法,HTTP/1.1 新增了五種請求方法:OPTIONS、 PUT、DELETE、 TRACE 和 CONNECT 方法。它主要是把伺服器作為跳板,先驗證使用者名稱和密碼等資訊,再讓伺服器代替使用者去訪問其它網頁,之後把資料傳回給使用者。對HTTP/1.1 的 CONNECT 有興趣,可以查閱 HTTP代理協議 HTTP/1.1 的 CONNECT 方法


簡書的PC端部分是如此實現。開啟簡書網頁,Charles抓取到的 中,可以見到它的 Method 為 CONNECT 請求方式。


CONNECT 請求方式


2、使用自簽名證書的應用和雙向驗證的應用。在抓取一些第三方應用的包時候,為什麼很多時候都抓取不到資料呢?


其一,客戶端透過指定的方式只信任某一個證書;其二,一般做法只有客戶端驗證服務端公鑰證書是不是合法,但是某些 app,比如支付寶,採用雙向驗證的方式,在通訊過程中,伺服器會驗證 app 的公鑰證書,這時候,就沒辦法使用 Charles(中間人攻擊的方式)進行抓包。

   

3、對傳回資料進行加密(RAS保密 + token驗證  &  效率更高的AES) 。


4、判斷客戶端當前是否設定了代理。這也是本人透過 NSURLProtocol 攔截請求後,判斷是否設定了代理,實現了防止 Charles 抓取 APP 的資料。


具體當進行網路請求的時候,如果設定了代理,不允許進行訪問,對支付寶 APP 抓包時候,設定了代理後開啟,很多介面都是無法訪問了,某部分介面不知是否透過這方式實現?有瞭解的,感謝分享下。?

判斷客戶端是否設定了代理,具體程式碼可以參考:iOS開發 如何判斷網路請求是否開啟了代理


?For The Good App.


參考:

  • iOS Charles 抓包 https 實戰並篡改傳回資料

  • Android 系統各個版本上https的抓包


編號283,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂