摘要:還有就是項目發(fā)布后項目中一些數(shù)據(jù)安全,等方面,都值得我們考慮,思索。官方文檔安全說明及其以上系統(tǒng)提供了為應(yīng)用程序數(shù)據(jù)的備份和恢復(fù)功能,此功能的開關(guān)決定于該應(yīng)用程序中文件中的屬性值,其屬性值默認(rèn)是。解決方案自己進(jìn)行數(shù)據(jù)加密。
1. AndroidManifest在個人和公司開發(fā)的項目發(fā)布后,作為軟件工程師最擔(dān)心的就是代碼安全(雖說現(xiàn)今而言,技術(shù)已沒有什么秘密,聰明人很多,你的功能可能別人稍加研究就能不看代碼也能實現(xiàn)(黑科技除外),但實現(xiàn)歸實現(xiàn),實現(xiàn)的方案,思路,性能這些是別人無法復(fù)制的)。
還有就是項目發(fā)布后項目中一些數(shù)據(jù)安全,等方面,都值得我們考慮,思索。
AndroidManifest中的android:allowBackup屬性,默認(rèn)為true,如無特殊情況,可以改為false,防止數(shù)據(jù)被備份。
官方文檔 安全說明
2. 防截屏Android API Level
8及其以上Android系統(tǒng)提供了為應(yīng)用程序數(shù)據(jù)的備份和恢復(fù)功能,此功能的開關(guān)決定于該應(yīng)用程序中AndroidManifest.xml文件中的allowBackup屬性值[1]
,其屬性值默認(rèn)是True。當(dāng)allowBackup標(biāo)志為true時,用戶即可通過adb backup和adb
restore來進(jìn)行對應(yīng)用數(shù)據(jù)的備份和恢復(fù),這可能會帶來一定的安全風(fēng)險。Android屬性allowBackup安全風(fēng)險源于adb backup容許任何一個能夠打開USB
調(diào)試開關(guān)的人從Android手機(jī)中復(fù)制應(yīng)用數(shù)據(jù)到外設(shè),一旦應(yīng)用數(shù)據(jù)被備份之后,所有應(yīng)用數(shù)據(jù)都可被用戶讀??;adb
restore容許用戶指定一個恢復(fù)的數(shù)據(jù)來源(即備份的應(yīng)用數(shù)據(jù))來恢復(fù)應(yīng)用程序數(shù)據(jù)的創(chuàng)建。因此,當(dāng)一個應(yīng)用數(shù)據(jù)被備份之后,用戶即可在其他Android手機(jī)或模擬器上安裝同一個應(yīng)用,以及通過恢復(fù)該備份的應(yīng)用數(shù)據(jù)到該設(shè)備上,在該設(shè)備上打開該應(yīng)用即可恢復(fù)到被備份的應(yīng)用程序的狀態(tài)。尤其是通訊錄應(yīng)用,一旦應(yīng)用程序支持備份和恢復(fù)功能,攻擊者即可通過adb backup和adb
restore進(jìn)行恢復(fù)新安裝的同一個應(yīng)用來查看聊天記錄等信息;對于支付金融類應(yīng)用,攻擊者可通過此來進(jìn)行惡意支付、盜取存款等;因此為了安全起見,開發(fā)者務(wù)必將allowBackup標(biāo)志值設(shè)置為false來關(guān)閉應(yīng)用程序的備份和恢復(fù)功能,以免造成信息泄露和財產(chǎn)損失。
在登錄和注冊,或修改密碼等敏感數(shù)據(jù)操作時,如果手機(jī)中有后臺默認(rèn)隱藏截屏的應(yīng)用,在輸入是一直截屏,就有可能盜取敏感數(shù)據(jù)信息。
解決方案:
在Activity onCreate 中加入:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);3. 本地數(shù)據(jù)加密
開發(fā)過程中少不了通過 android.content.SharedPreferences 進(jìn)行一些數(shù)據(jù)和變量存儲,但是這些數(shù)據(jù)很容易被讀取到,所以需要應(yīng)對數(shù)據(jù)進(jìn)行加密處理。
解決方案:
自己進(jìn)行數(shù)據(jù)加密。
通過第三方進(jìn)行加密,在此推薦:Hawk
4. 隱藏日志如果開發(fā)項目搭建之初就對項目整體考慮周到了,我覺得這點(diǎn)應(yīng)該不用,但是如果項目框架搭建之初沒進(jìn)行此方面的考慮,就得自行處理了,具體方案如下:
先在當(dāng)前Module下的build.gradle中的buildTypes方法中代碼至如下(之前自己的配置代碼不變):
buildTypes { release { buildConfigField "boolean", "LOG_DEBUG", "false" proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" } }
然后在proguard-rules.pro文件中加入:
-assumenosideeffects class android.util.Log{ public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); }
至此,可以完全隱藏android.util.Log的所有日志。
5. 混淆先在當(dāng)前Module下的build.gradle中的buildTypes方法中修改代碼至如下(之前自己的配置代碼不變):
buildTypes { release { minifyEnabled true } }
然后再在proguard-rules.pro文件中加入引用的jar、library等進(jìn)行排除操作。
在此推薦一個Android Studio插件,免去自己一個一個添加的麻煩:AndroidProguardPlugin 一鍵生成項目混淆代碼插件(此插件還在繼續(xù)完善中,如有沒有添加的庫,可以直接聯(lián)系插件開發(fā)者進(jìn)行添加)
以上是總結(jié)的一些安全方面的方案,希望有用,當(dāng)然,代碼方面還可以進(jìn)行項目加殼處理,進(jìn)一步進(jìn)行安全保護(hù),具體加殼可以利用一些第三方平臺等,這里不一一列舉,自行Baidu,Google。
by anonymous (感謝趙同學(xué)整理)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/11201.html
摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會問到混合開發(fā)的知識,至于我為什么傾向于混合開發(fā),我的一句話就是走上編程之路,將來你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...
閱讀 1087·2021-10-19 11:42
閱讀 3058·2021-09-10 10:51
閱讀 758·2021-09-09 09:33
閱讀 1835·2021-09-01 10:43
閱讀 2833·2019-08-30 12:43
閱讀 3573·2019-08-30 11:24
閱讀 2277·2019-08-30 10:56
閱讀 2831·2019-08-29 11:00