1. 程式人生 > >iOS 防止抓包

iOS 防止抓包

原文連結: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抓取到的 <unknown> 中,可以見到它的 Method 為 CONNECT 請求方式。

CONNECT 請求方式

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

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

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

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

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