国产精品成I2018好看的中文在线观看I在线观看爱爱视频I日韩在线第一区I五月开心六月婷婷I日韩视频一I国产视频色I久久成人午夜视频

網站開發 APP開發 小程序開發 SEO優化 公司新聞

App開發安全設置二三事

2018-06-04 00:00:00
2253

  為什么要安全

  現在幾乎所有App都是網絡強相關的,客戶端展示的很多東西都是通過接口從服務器上獲取的,當然,服務器也會接收大量從客戶端上傳的數據,這兩端在進行雙向通信的時候,就很容易被第三方截獲,導致數據被盜取、接口被盜刷。

  App的移動安全主要包括下面幾種:

  密鑰破解,導致本地加密數據被盜取

  通信密鑰破解,導致接口數據被盜取

  偽造接口數據上報

  接口簽名被破解,導致接口可以被重放攻擊那么歸結起來,實際上就是這樣幾種模式:

  代碼反編譯

  so破解

  中間人攻擊用戶要的安全

  對于用戶來說,他所需要的安全,是自己的敏感數據不被泄漏,不被第三方所知曉,所以,客戶端數據的安全,一般會使用加密的方式來保證安全,但數據既然存在本地,那么自然既需要加密,也需要解密(如果不需要解密,那么也就沒有保留的必要了),所以,本地就一定會有加解密的密鑰,那么為了保證這個密鑰的安全,本地代碼又需要進行加密,這樣突然好像就進入了一個死循環,成了一個雞生蛋,蛋生雞的問題,這也是為什么『本地沒有絕對的安全』這樣一說的原因。

  本地加密

  本地的加密,我們通常從混淆——proguard入手,這是最簡單的加密,成本最低,而且可以比較有效的扼殺一些在破解邊緣徘徊的初級破解者,讓他們能夠懸崖勒馬,浪子回頭,然而,對于真正想要破解的人來說,混淆只等于加大了一點閱讀難度而已,相信做開發的同學基本上也都反編譯過別人家的App,通過像jadx、apktool、dex2jar這樣的反編譯工具,可以非常方便的找到破解的蛛絲馬跡,特別像jadx這樣的反編譯神器,直接導出gradle工程去AS里面查看代碼,簡直不要太舒服。
 

  再高級一點,我們通過Dexguard、各種第三方so加固服務、加殼服務等方式來進行保護,這些方式的確會極大的增加破解者的破解成本,到對于主流的加固技術,相應的破解技術也是非常成熟的,所以說,雖然技術很牛逼,但只要破解者知道了你加固的方式,就可以輕而易舉的找到破解的方法,也就是比proguard多了一次Google的過程。

  說完了這些代碼的安全,我們再來看看密鑰的安全問題,前面說了,密鑰一定會『藏』在本地。

  最低級的,密鑰被直接放在Java代碼中,這種基本上就是為了糊弄老板的,稍微高級點的,也放在Java代碼中,但是并不是直接讓你找到的,為了增加自己的一點信心,他會把密鑰拆成幾個部分,然后通過一定算法計算合成完整的密鑰,自欺欺人罷了,再高級一點,會把密鑰和加解密放so中,再進一步,同樣將密鑰打散,通過一定算法進行組裝,再高級一點,so再做下簽名校驗,加個花指令,甚至是一些人肉混淆(1、I、l),一步步的,過濾了一批批小白、初級、中級、高級破解者,然而,天下無利不往,如果你的App真的有這樣的價值,那也一定會吸引那些骨灰破解者,畢竟人怕出名豬怕壯。

  當然Google也總是后知后覺,在各種廠商提供了TrustZone/TEE硬件加密方案后,Google也推出了Keystore,當然,最低要API26才能使用,所以在現在來說,幾乎不會有App能做到最低版本26,也就沒辦法借助Keystore來進行安全存儲了。

  接口簽名

  接口上的安全,最基本的保證就是Https,同時對SSL協議的域名進行校驗(關鍵詞:X509TrustManager、hostnameVerifier),相信大部分的開發者都沒有對這兩個地方進行校驗,在此之上,請求的接口上,我們一般會帶上一個簽名,或者叫token,這個加密的密鑰串,就是我們身份的象征,一般來說,這個簽名也就是通過前面我們千辛萬苦要藏好的本地密鑰來進行生成的,通常也就是那幾個參數,例如時間戳、UserID、IMEI、Mac地址等等進行拼裝,然后通過DES、3DES、AES、hmacSHA1等方式進行加密后,再經過Base64進行編碼生成的,這些加密過程就不贅述了,反正大家的都不一樣,根據關鍵詞大家去Google下就好了。

  服務端要的安全

  服務端需要的安全,主要是希望收到的請求,都真實的來自正常用戶的正常觸發。

  但客戶端在由不受信第三方(比如用戶)控制的情況下,基本不存在能夠驗證請求是來自“自己的”客戶端的方法,只能通過以下兩種方式來增加破解者的破解成本。

  本地秘鑰+算法,用于生成接口簽名,難點在于如何保證本地秘鑰和算法的安全性,也就是我們前面說的

  動態秘鑰,將密鑰的生成放在服務端,難點在于如何保證通信協議的安全性,同時也需要本地密鑰來保證請求動態密鑰的接口安全動態秘鑰下發的方案,需要在保證通信協議安全的情況下,才有實現價值,例如某活動頁面的刷榜,可以增加一個前置依賴接口用于動態返回秘鑰,客戶端使用該動態秘鑰來進行活動頁面的請求,秘鑰不存本地,每次請求都是新的秘鑰,設置網絡請求框架的NO_PROXY模式,就是一個最簡單的方案。

  考慮到服務器設備的安全性,目前主流的防作弊檢測都是在服務端進行,當然最主要的原因還是本地根本沒辦法保證絕對的安全。

  識別用戶請求鏈路

  根據必要的API調用流程和閉環,限制一組API調用中不同個體API相對于其它API的調用頻率(相對次數)限制。設定幾個隱秘的參數關聯邏輯,是跟業務邏輯環環相扣的,如果其他人想要自己拼裝參數,往往會打破這個隱秘約束。

  但這個檢測通常需要耗費一定的系統資源,同時,當業務比較復雜的時候,如何保證請求檢測的實時性和高效性,就成了一個很難平衡的問題。

  網關層攔截、人機識別

  網關層攔截同IP的大量重復請求,設置同IP訪問的閾值。

  大數據識別,對識別為惡意請求的進行封號處理這是目前比較主流的做法。

  TCP加密

  目前大部分的App都是通過Http來進行數據交互,但基于TCP,我們可以實現自己的通信協議,另外,利用TCP包的無序性來增加破解的難度,這樣,利用TCP心跳來維持一個安全的通信通道,也是一個非常不錯的方案,不過操作難度比較大。

  修改業務邏輯處理方式

  在設計業務技術實現方案時,將業務判斷邏輯放在后端,客戶端只做指令上發,判斷是否生效,在服務端進行判斷。

  后現代安全

  量子加密、白盒加密、人工智能分析,這些基本都是下一代的安全策略,就當前來說,還比較虛幻,不過只要技術一旦成熟,一定將是劃時代的里程碑。

  ?

?
主站蜘蛛池模板: www日日 | 成人一区二区三区在线观看 | 久久综合婷婷国产二区高清 | 国内外成人免费在线视频 | 国产精品69久久久久 | 亚洲国产日韩精品 | 黄色网在线免费观看 | 亚洲精品视频一二三 | 国产日韩中文字幕在线 | 人人添人人澡人人澡人人人爽 | 超碰999 | 成年人免费电影在线观看 | 成人一区二区在线观看 | 国产热re99久久6国产精品 | 久草观看 | 91禁在线看 | 夜又临在线观看 | 亚洲免费观看在线视频 | 婷婷去俺也去六月色 | 一本一本久久a久久 | 高清av网站 | 亚洲精品国产综合99久久夜夜嗨 | 日本黄色一级电影 | 欧美日韩午夜爽爽 | 91成人网在线 | 毛片播放网站 | 特级黄色视频毛片 | 欧美性生活免费看 | 四虎在线免费视频 | 欧美综合干| 久久9999久久| 久草香蕉在线 | 久久伊人精品一区二区三区 | 永久免费在线 | 久久久午夜精品理论片中文字幕 | 国产精品亚州 | 最新日韩中文字幕 | 精品国产理论 | 成人国产精品一区二区 | 精品久久久免费 | 一区二区三区高清在线观看 | 日韩视频免费观看高清 | 日韩欧美区 | 国产在线色视频 | www.人人草 | 亚洲国内精品视频 | aaaaaa毛片 | 一区二区三区四区精品视频 | 亚洲精品在线免费播放 | 精品999久久久 | 国产伦精品一区二区三区无广告 | 国产精品一区二区三区免费视频 | 视频直播国产精品 | 日韩欧美在线观看一区 | 欧美日韩视频网站 | 亚洲a在线观看 | 丰满少妇在线观看资源站 | 国产精品日韩欧美 | 亚洲天堂在线观看完整版 | 99热精品久久 | 午夜一级免费电影 | 国产精品精品国产 | 日韩一区二区三区免费视频 | 久久久久国产精品一区二区 | 日韩免费视频观看 | www.国产精品 | 成人免费视频观看 | 欧美综合色在线图区 | 久久99精品久久久久蜜臀 | 亚洲精品系列 | 久久久精品国产免费观看一区二区 | 狠狠狠色丁香婷婷综合激情 | 91视频在线免费下载 | 日韩一二区在线 | 又黄又刺激 | 成人在线播放免费观看 | 国产精品刺激对白麻豆99 | 午夜久久久影院 | 久久综合久久88 | www.狠狠插.com | 狠狠综合网 | 人人插人人做 | 国产福利在线不卡 | 一区二区视频在线播放 | 久久人人爽人人爽人人片 | 久久伊人热| 成人avav| 亚洲精品1234区 | 精品国偷自产在线 | 午夜色影院 | 视频一区在线播放 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久视频在线观看免费 | 欧美日韩在线观看一区二区三区 | 91av在线国产 | 中文字幕三区 | 亚洲无人区小视频 | 婷婷久操 | www.五月激情.com |