• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Android應用程序的權限機制

    發表于:2011-06-24來源:未知作者:娃娃點擊數: 標簽:
    (一)Android安全架構 Android安全架構中一個中心思想就是:應用程序在默認的情況下不可以執行任何對其他應用程序,系統或者用戶帶來負面影響的操作。 一個應用程序的進程就是一個安全的沙盒。它不能干擾其它應用程序,除非顯式地聲明了“permis

      (一)Android安全架構

      Android安全架構中一個中心思想就是:應用程序在默認的情況下不可以執行任何對其他應用程序,系統或者用戶帶來負面影響的操作。

      一個應用程序的進程就是一個安全的沙盒。它不能干擾其它應用程序,除非顯式地聲明了“permissions”,以從而獲取基本沙盒所不具備的能力。對于應用程序請求的“permissions” 可以有幾種處理方式:如自動允許該權限,通過用戶提示或者證書來允許或禁止該權限。應用程序需要的“permissions”在程序中靜態聲明,在程序安裝時被系統知曉,并不會再改變。

      所有的Android應用程序(.apk文件)必須用數字證書進行簽名認證,該證書的私鑰由開發者保有。該證書可用以識別應用程序的作者。該證書無需CA簽名認證(注:CA就是一個第三方的證書認證機構,如verisign等)。Android應用程序允許(而且一般也都是)使用self-signed證書(自簽名證書)。證書主要用于在應用程序之間建立信任關系,而不是用于控制程序是否可以安裝。簽名影響安全性的最重要的方式是通過決定誰可以進入基于簽名的permisssions,以及誰可以共享用戶IDs。

      (二)應用程序的用戶IDs和數據訪問機制

      應用程序的用戶IDs:

      每一個Android應用程序(.apk文件)都會在安裝時獲取一個獨有的Linux用戶ID,這就為它建立了一個沙盒,使其不能與其他應用程序進行接觸。該用戶ID在安裝時分配,并在該設備上一直保持同一數值。

      由于安全性限制措施是發生在進程級,所以兩個package中的代碼不會運行在同一個進程當中,而是作為不同的Linux用戶出現。我們可以通過使用AndroidManifest.xml文件中的manifest標簽的sharedUserId屬性,來使不同的package共用同一個用戶ID。通過這種方式,這兩個package就會被認為是同一個應用程序,擁有同一個用戶ID(實際不一定),并且擁有同樣的文件存取權限。

      注意:為了保持安全,僅當兩個應用程序被同一個簽名簽署的時候(并且請求了同一個sharedUserId)才會被分配同樣的用戶ID。

      數據訪問機制:

      所有存儲在應用程序中的數據都會被賦予一個屬性——該應用程序的用戶ID,這使得其他應用程序無法訪問這些數據。當通過以下方法getSharedPreferences(String, int),openFileOutput(String, int)或者 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)來創建一個新文件時,你可以通過使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE標志位來設置是否允許其他應用程序來讀寫這個文件。當設置這些標志位時,該文件仍然屬于該應用程序,但是它對于其他任何應用程序也是可見的。

      (三)權限(permission)

      權限用來描述是否允許做某件事。Android系統中權限分為普通級別(Normal),危險級別(dangerous),簽名級別(signature)和系統/簽名級別(signature or system)。系統中所有預定義的權限根據作用的不同,分別屬于不同的級別。

      對于普通和危險級別的權限,我們稱之為低級權限,應用申請即授予。其他兩級權限,我們稱之為高級權限或系統權限,應用程序擁有platform級別的認證才能申請。當應用試圖在沒有權限的情況下做受限操作,應用將被系統殺掉以警示。

      系統應用可以使用任何權限。權限的聲明者可無條件使用該權限。

      目前Android系統定義了許多權限,通過SDK文檔用戶可以查詢到哪些操作需要哪些權限,然后按需申請。

      要賦予應用程序權限,首先要在AndroidManifest.xml中使用一個或多個 標簽進行聲明。例如,一個應用程序想用控制誰能啟動一個activities,它可以為聲明一個該操作的許可,如下:

      

      

      android:name="com.me.app.myapp.permission.DEADLY_ACTIVITY"

      android:label="@string/permlab_deadlyActivity"

      android:description="@string/permdesc_deadlyActivity"

      android:permissionGroup="android.permission-group.COST_MONEY"

      android:protectionLevel="dangerous"

      />

      

     

     

     

      (四)使用權限(uses-permission)

      應用需要的權限應當在users-permission屬性中申請,所申請的權限應是已經被系統或某個應用程序定義過的,否則視為無效申請。同時,使用權限的申請需要遵循權限授予條件,非platform認證的應用程序無法申請高級權限。

      所以,應用程序的權限級別大致分為兩種:

       第一種低級點的(permission的protectlevel屬性為normal或者dangerous),其調用者apk只需聲明即可擁有其permission。

       第二種高級點的(permission的protectlevel屬性為signature或者signatureorsystem),其調用者apk就需要和被調用的apk一樣擁有相同的signature。

      若想擁有所需的權限,必須在AndroidManifest.xml文件中包含一個或更多的 標簽來聲明此權限。

      例如低級權限需要監聽來自SMS消息的應用程序將要指定如下內容:

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>