Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [Android應用開發]-(7)安全性設計(完整版請參考官方)

[Android應用開發]-(7)安全性設計(完整版請參考官方)

編輯:關於Android編程

   Android的設計為大多數開發者能夠使用默認的設置構建應用程序,而不需要在安全性方面作出更多的思考。Android還有許多操作系統內置的安全功能,大幅度減少應用程序安全性的問題和頻率。

    一些安全特性可以幫助開發人員構建安全的應用程序,其中包括:

    1、Android應用程序沙箱在每個應用程序的基礎上分離數據和執行代碼。

    2、 Android應用程序框架實現了共同的安全功能,如加密,權限,安全的進程間通信。

    3、像ASLR, NX, ProPolice, safe_iop,OpenBSD dlmalloc, OpenBSD calloc, 和 Linux mmap_min_addr 的技術以減輕相關的風險與常見的內存分配錯誤

    4、加密的文件系統可保護設備數據丟失或被盜

    然而,重要的是為開發人員熟悉Android安全的最佳做法,以確保開發者使用這些個功能的優勢,減少無意引入的安全問題,這些無意引入的問題可能影響到應用程序的安全性。

    本文檔圍繞共同的API和開發技術,可以為你的應用程序及用戶的安全隱患提供最佳的做法,而最佳實踐是不斷發展的,建議隨時檢測應用程序的開發過程

    本文包括:

        Ø  使用虛擬機代碼

        Ø  使用本地代碼

        Ø  數據存儲

        Ø  使用IPC

        Ø  使用權限

        Ø  使用網絡

        Ø  動態加載代碼

        Ø  執行輸入驗證

        Ø  處理用戶數據

        Ø  使用加密

 

1)  使用虛擬機代碼

 

    這篇文章重點關注Android特性或者不同環境下的安全性問題。對於在其他虛擬機環境中有編程經驗的開發者,也有可能編寫Android應用程序,其中有兩大問題:

    3、一些虛擬機,如JVM或.net運行時,作為一個安全邊界,從底層操作系統功能上隔離代碼。在Android上,Dalvik虛擬機並不是一個安全邊界,在操作系統級別上實現應用程序沙箱,這樣,虛擬機能夠在沒有任何安全限制下,在相同的應用程序中操作本地代碼。

    4、考慮到移動設備上有限的存儲空間,使得開發者都願意建立模塊化的應用程序,並實現動態加載。當考慮到這兩點,要確保源和應用程序邏輯都存儲在本地。沒有驗證的來源不要使用動態加載,不安全的網絡資源或外部存儲等,因為這些代碼可以修改,可能包含著惡意行為。

 

2)  使用本地代碼

    一般情況下,我們鼓勵開發者使用Android SDK開發應用程序,而不是使用本機代碼(*.so),本地代碼構建的應用程序更復雜,更便攜,但對於常見的內存損壞錯誤,如緩沖區溢出等問題不好控制。

    Android是使用Linux內核,如果你要使用本機代碼,那麼熟悉Linux開發安全的最佳方法是非常有必要的。討論這些最佳做法這篇文章是太短了,但可以參考Linux和Unix的“安全編程”,可點擊此鏈接查看:http://www.dwheeler.com/secure-programs

    Android和大多數Linux環境之間的一個重要卻別是應用程序沙箱。在Android中,所有的應用程序運行都在應用程序沙箱,包括本機代碼。在最基本的水平,熟悉Linux的開發人員認為它是一個好辦法,要知道,每個應用程序都被賦予一個唯一的UID,以及非常有限的權限。在Android安全性概述中將詳細討論這個問題,你應該熟悉應用程序的權限,即使您在使用本地代碼。

3)  存儲數據

    1、使用內部文件

    在默認情況下,Android創建文件只能創建在內部存儲器上,這種保護是由Android實現的,對於大多數應用程序這以及足夠了,因為不提供特定應用程序訪問數據格式的能力,也不提供任何數據的控制能力,作為一個替代的方案,你可以考慮使用ContentProvider提供讀取和寫入權限,可以動態授權。

    為敏感數據提供額外的保護,一些應用程序選擇用一個Key加密本地的文件。(例如,一個鍵可以被放置在一個KeyStore保護用戶密碼但不存儲在設備上)。雖然這並不從根本上進行保護,如果設備丟失,並且沒有對文件系統加密,那麼它可以通過監視用戶輸入的密碼保護數據。

    2、使用外部存儲

    在外部存儲中創建文件,如:SD卡,能夠供所有程序讀寫。由於外部存儲可由用戶移除,任何應用程序都可以修改存儲數據。建議應用程序不要使用外部存儲器存儲敏感信息

    任何不可信任的數據來源,從外部存儲數據時應用程序應該要執行輸入驗證。我們強烈建議應用程序動態加載之前保存在外部存儲的可執行文件或類文件。如果應用程序是從外部存儲檢索可執行文件,應該簽署和加密驗證的動態加載之前。

    3、使用Context providers

    ContentProviders提供了結構化的存儲機制。可在自己的應用程序中允許或限制其他應用訪問。默認情況下,一個ContentProviders允許其他應用程序使用。如果不打算其他應用程序訪問你的ContentProvider,可在應用程序的mainfest中設置android:exported=false。www.2cto.com

    當創建一個ContentProvider給其他應用程序使用,可單獨指定讀/寫權限。建議給定的權限能完成當前的工作即可。

    如果你使用ContentProvider在統一開發者不同應用程序中進行數據共享,最好使用簽名級別的權限。簽名權限不需要用戶確認,這樣可提供更好的用戶體驗和訪問控制。

    更多的設計方法請看官方文檔,能看懂意思但還沒到達翻譯的水平,也就寫到這裡好了。我想我更多的任務可能還是下文,而非翻譯。實在抱歉~

4)  使用IPC

5)  使用權限

6)  使用網絡

7)  動態加載代碼

8)  執行輸入驗證

9)  處理用戶數據

10)使用加密

 作者:tangcheng_ok
 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved