在 Android 上,就如同所有的電腦裝置一樣,AIR 符合原生安全性模型。同時,AIR 會維護自己的安全性規則,其用意在於使開發人員易於撰寫安全且連接網際網路的應用程式。
因為在 Android 上的 AIR 應用程式使用 Android 套件格式,安裝要符合 Android 安全性模型。不會使用 AIR 應用程式安裝程式。
Android 安全性模型具有三個主要的層面:
Android 權限
Android 的許多功能是由作業系統權限機制保護。為了使用受保護的功能,AIR 應用程式描述器必須宣告應用程式所需的必要權限。當使用者嘗試安裝應用程式時,Android 作業系統會在安裝繼續之前,對使用者顯示所有必要的權限。
大部分的 AIR 應用程式都需要在應用程式描述器中指定 Android 權限。根據預設,不會包括任何權限。若要透過 AIR 執行階段公開受保護的 Android 功能,需要下列權限:
-
ACCESS_COARSE_LOCATION
-
允許應用程式透過 Geolocation 類別存取 WIFI 與行動電話網路位置資料。
-
ACCESS_FINE_LOCATION
-
允許應用程式透過 Geolocation 類別存取 GPS 資料。
-
ACCESS_NETWORK_STATE 與 ACCESS_WIFI_STATE
-
允許應用程式透過 NetworkInfo 類別存取網路資訊。
-
CAMERA
-
允許應用程式存取攝影機。
-
INTERNET
-
允許應用程式提出網路要求。也允許遠端除錯。
-
READ_PHONE_STATE
-
允許 AIR 執行階段在來電時將音效靜音。
-
RECORD_AUDIO
-
允許應用程式存取麥克風。
-
WAKE_LOCK 與 DISABLE_KEYGUARD
-
允許應用程式使用 SystemIdleMode 類別設定,避免裝置進入休眠。
-
WRITE_EXTERNAL_STORAGE
-
允許應用程式寫入裝置上的外部記憶卡。
應用程式簽名
為 Android 平台建立的所有應用程式套件都必須簽署。因為在 Android 上的 AIR 應用程式是以原生 Android APK 格式封裝,所以它們會根據 Android 慣例來簽署,而不是以 AIR 的慣用方式。雖然 Android 與 AIR 使用程式碼以類似方式進行簽署,但有著相當大的差異:
-
在 Android 上,簽名會確認私密金鑰具有所屬開發人員,並非用來確認開發人員的身分。
-
對於送出至 Android Market 的應用程式,憑證的有效期必須至少 25 年。
-
Android 不支援將套件簽名移轉至其他憑證。如果更新是由不同的憑證簽署,則使用者必須解除安裝原始的應用程式,才能安裝更新的應用程式。
-
使用相同憑證簽署的兩個應用程式可以指定共用的 ID,以允許它們存取彼此的快取與資料檔案。(這樣的共用不是透過 AIR 進行。)
應用程式使用者 ID
Android 使用 Linux 核心。系統會為每個已安裝的應用程式指定 Linux 類型的使用者 ID,以便為檔案存取這類的操作決定其權限。在應用程式、應用程式儲存及暫存目錄中的檔案受到保護,要透過檔案系統權限才能存取。在電腦上將 SD 卡掛接成大量儲存裝置時,寫入外部儲存 (也就是 SD 卡) 的檔案可由其他應用程式或使用者讀取、修改和刪除。
以網際網路要求接收的 Cookie 不會在 AIR 應用程式之間共用。
背景影像隱私權
使用者將應用程式切換至背景時,有些 Android 版本會擷取螢幕快照,在目前的應用程式清單以縮圖形式使用。此螢幕快照儲存在裝置記憶體中,攻擊者可以存取來實際控制裝置。
如果您的應用程式會顯示機密資訊,則應防範背景螢幕快照擷取這類資訊。NativeApplication 物件所傳送的
deactivate
事件指出,應用程式即將切換至背景。使用此事件可以清除或隱藏任何機密資訊。
Android 上加密的資料
在 Android 上的 AIR 應用程式,可以使用內建 SQL 資料庫可用的加密選項,以儲存加密的資料。為了讓安全性達到最佳狀態,每當應用程式執行時都要以使用者所輸入密碼的對應加密金鑰為基礎。您無法向能夠存取應用程式檔案的攻擊者隱藏在本機儲存的加密金鑰或密碼。如果攻擊者能擷取金鑰,即使加密資料,Android 系統提供的使用者 ID 系統檔案安全功能也無法發揮效用。
EncryptedLocalStore 類別可用來儲存資料,但在 Android 裝置並不會加密該資料。 但 Android 安全性模式仰賴應用程式使用者 ID 來保護資料,防止其它應用程式存取。 使用共享使用者 ID 且以相同的程式碼簽署憑證來簽署的應用程式,都會使用同一個加密的本機儲存區。
重要事項:
在根層級的手機上,以根權限執行的任何應用程式都能存取任何其它應用程式的檔案。因此,使用加密的本機儲存區儲存的資料在根層級裝置上並不安全。
|
|
|