? ? 現(xiàn)在 APP 開發(fā)嗤攻,數(shù)據(jù)的保密性越來越受重視,保密性高才不會(huì)讓數(shù)據(jù)輕易被泄露诽俯,同時(shí)保護(hù)到用戶和公司的利益妇菱。如何做到保密更加完善呢?怎么防止 Charles 獲取數(shù)據(jù)呢惊畏?
? ? 1恶耽、通過 HTTP/1.1 及以上版本的 CONNECT?請(qǐng)求方式。CONNECT?請(qǐng)求方式是什么呢颜启?開發(fā)中我們多數(shù)用的是 POST 和 GET 來向服務(wù)端請(qǐng)求數(shù)據(jù)偷俭。
? ? CONNECT 是在?HTTP/1.1 協(xié)議中,HTTP/1.0 定義了三種請(qǐng)求方法: GET, POST 和 HEAD方法缰盏,HTTP/1.1 新增了五種請(qǐng)求方法:OPTIONS涌萤、 PUT、DELETE口猜、 TRACE 和 CONNECT 方法负溪。它主要是把服務(wù)器作為跳板,先驗(yàn)證用戶名和密碼等信息,再讓服務(wù)器代替用戶去訪問其它網(wǎng)頁密幔,之后把數(shù)據(jù)返回給用戶昧廷。對(duì)HTTP/1.1 的?CONNECT?有興趣弄诲,可以查閱?HTTP代理協(xié)議 HTTP/1.1 的 CONNECT 方法塔插。
? ? 簡(jiǎn)書的PC端部分是如此實(shí)現(xiàn)。打開簡(jiǎn)書網(wǎng)頁,Charles抓取到的 <unknown> 中,可以見到它的 Method 為 CONNECT 請(qǐng)求方式茸炒。
? ? 2、使用自簽名證書的應(yīng)用和雙向驗(yàn)證的應(yīng)用。在抓取一些第三方應(yīng)用的包時(shí)候,為什么很多時(shí)候都抓取不到數(shù)據(jù)呢?
? ? 其一吼拥,客戶端通過指定的方式只信任某一個(gè)證書;其二,一般做法只有客戶端驗(yàn)證服務(wù)端公鑰證書是不是合法,但是某些 app纳击,比如支付寶刨啸,采用雙向驗(yàn)證的方式,在通信過程中,服務(wù)器會(huì)驗(yàn)證 app 的公鑰證書,這時(shí)候,就沒辦法使用 Charles(中間人攻擊的方式)進(jìn)行抓包。
? ? 3淌友、對(duì)返回?cái)?shù)據(jù)進(jìn)行加密(RAS保密 + token驗(yàn)證 ?& ?效率更高的AES)?器联。
? ? 4氓栈、判斷客戶端當(dāng)前是否設(shè)置了代理奥务。這也是本人通過?NSURLProtocol 攔截請(qǐng)求后帚称,判斷是否設(shè)置了代理楼吃,實(shí)現(xiàn)了防止 Charles 抓取 APP 的數(shù)據(jù)。
? ? 具體當(dāng)進(jìn)行網(wǎng)絡(luò)請(qǐng)求的時(shí)候男韧,如果設(shè)置了代理寡壮,不允許進(jìn)行訪問棒仍,對(duì)支付寶 APP 抓包時(shí)候乱陡,設(shè)置了代理后打開仪壮,很多界面都是無法訪問了,某部分界面不知是否通過這方式實(shí)現(xiàn)适篙?有了解的,感謝分享下翁都。??
? ? 判斷客戶端是否設(shè)置了代理,具體代碼可以參考:iOS開發(fā) 如何判斷網(wǎng)絡(luò)請(qǐng)求是否開啟了代理。
???For The Good App.
參考: