iOS 防止 Charles 抓取數據

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

iOS 防止 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 請求方式。

iOS 防止 Charles 抓取數據

CONNECT 請求方式

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

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

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

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

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

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

For The Good App.

參考:

  • iOS Charles 抓包 https 實戰並篡改返回數據
  • Android 系統各個版本上https的抓包

作者:Maxdon 鏈接:https://www.jianshu.com/p/1ab83d726d3f 如有侵權請聯繫刪除


分享到:


相關文章: