Android項目安全注意事項和解決方案

在我的和公司開發的項目發佈後,做爲軟件工程師最擔憂的就是代碼安全(雖然說現今而言,技術已沒有什麼祕密,聰明人不少,你的功能可能別人稍加研究就能不看代碼也能實現(黑科技除外),但實現歸實現,實現的方案,思路,性能這些是別人沒法複製的)。
還有就是項目發佈後項目中一些數據安全,等方面,都值得咱們考慮,思索。html

1. AndroidManifest

AndroidManifest中的android:allowBackup屬性,默認爲true,如無特殊狀況,能夠改成false,防止數據被備份。java

官方文檔 安全說明android

Android API Level
8及其以上Android系統提供了爲應用程序數據的備份和恢復功能,此功能的開關決定於該應用程序中AndroidManifest.xml文件中的allowBackup屬性值[1]
,其屬性值默認是True。當allowBackup標誌爲true時,用戶便可經過adb backup和adb
restore來進行對應用數據的備份和恢復,這可能會帶來必定的安全風險。git

Android屬性allowBackup安全風險源於adb backup允許任何一個可以打開USB
調試開關的人從Android手機中複製應用數據到外設,一旦應用數據被備份以後,全部應用數據均可被用戶讀取;adb
restore允許用戶指定一個恢復的數據來源(即備份的應用數據)來恢復應用程序數據的建立。所以,當一個應用數據被備份以後,用戶便可在其餘Android手機或模擬器上安裝同一個應用,以及經過恢復該備份的應用數據到該設備上,在該設備上打開該應用便可恢復到被備份的應用程序的狀態。github

尤爲是通信錄應用,一旦應用程序支持備份和恢復功能,攻擊者便可經過adb backup和adb
restore進行恢復新安裝的同一個應用來查看聊天記錄等信息;對於支付金融類應用,攻擊者可經過此來進行惡意支付、盜取存款等;所以爲了安全起見,開發者務必將allowBackup標誌值設置爲false來關閉應用程序的備份和恢復功能,以避免形成信息泄露和財產損失。安全

2. 防截屏

在登陸和註冊,或修改密碼等敏感數據操做時,若是手機中有後臺默認隱藏截屏的應用,在輸入是一直截屏,就有可能盜取敏感數據信息。app

解決方案:框架

在Activity onCreate 中加入:ide

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

3. 本地數據加密

開發過程當中少不了經過 android.content.SharedPreferences 進行一些數據和變量存儲,可是這些數據很容易被讀取到,因此須要應對數據進行加密處理。性能

解決方案:

  1. 本身進行數據加密。

  2. 經過第三方進行加密,在此推薦:Hawk

4. 隱藏日誌

若是開發項目搭建之初就對項目總體考慮周到了,我以爲這點應該不用,可是若是項目框架搭建之初沒進行此方面的考慮,就得自行處理了,具體方案以下:

先在當前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. 混淆

先在當前Module下的build.gradle中的buildTypes方法中修改代碼至以下(以前本身的配置代碼不變):

buildTypes {
    release {
        minifyEnabled true
    }
}

而後再在proguard-rules.pro文件中加入引用的jar、library等進行排除操做。

在此推薦一個Android Studio插件,免去本身一個一個添加的麻煩:AndroidProguardPlugin 一鍵生成項目混淆代碼插件(此插件還在繼續完善中,若有沒有添加的庫,能夠直接聯繫插件開發者進行添加)

以上是總結的一些安全方面的方案,但願有用,固然,代碼方面還能夠進行項目加殼處理,進一步進行安全保護,具體加殼能夠利用一些第三方平臺等,這裏不一一列舉,自行Baidu,Google。

by anonymous (感謝趙同窗整理)

相關文章
相關標籤/搜索