付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Android的安全與權(quán)限Android是一個(gè)多進(jìn)程系統(tǒng),每一個(gè)應(yīng)用程序(和系統(tǒng)的組成部分)都運(yùn)行在自己的進(jìn)程中。在應(yīng)用程序和系統(tǒng)間的安全通過標(biāo)準(zhǔn)的Linux設(shè)備在進(jìn)程級(jí)被執(zhí)行,例如被分配給應(yīng)用程序的用戶和組ID。額外的細(xì)粒度安全特性通過許可機(jī)制來提供,該機(jī)制能夠?qū)σ粋€(gè)指定進(jìn)程可實(shí)現(xiàn)的特定操作進(jìn)行約束。內(nèi)容安全結(jié)構(gòu)應(yīng)用程序簽名用戶標(biāo)識(shí)和文件訪問權(quán)限命名權(quán)限的聲明和支持在AndroidManifest.xml文件中支持權(quán)限發(fā)送廣播時(shí)支持權(quán)限其它權(quán)限的支持URI權(quán)限安全結(jié)構(gòu)Android安全學(xué)中的一個(gè)重要的設(shè)計(jì)點(diǎn)是在默認(rèn)情況下應(yīng)用程序沒有權(quán)限執(zhí)行對(duì)其它應(yīng)用程序、操作系統(tǒng)或用戶有害的操作。這些操作包
2、括讀/寫用戶的隱私數(shù)據(jù)(例如聯(lián)系方式或e-mail),讀/寫其它應(yīng)用程序的文件,執(zhí)行網(wǎng)絡(luò)訪問,保持設(shè)備活動(dòng),等等。應(yīng)用程序的進(jìn)程是一個(gè)安全的沙箱。它不能干擾其它應(yīng)用程序,除非在它需要添加原有沙箱不能提供的功能時(shí)明確聲明權(quán)限。這些權(quán)限請(qǐng)求能夠被不同方式的操作所處理,特別的要基于證書和用戶的提示被自動(dòng)的允許或禁止。權(quán)限的請(qǐng)求在那個(gè)應(yīng)用程序中通過一個(gè)應(yīng)用程序被聲明為靜態(tài)的,所以在此之后在安裝時(shí)或沒有改變時(shí)它們會(huì)預(yù)先知道。應(yīng)用程序簽名所有的Android應(yīng)用程序(.apk文件)必須通過一個(gè)證書的簽名,此證書的私鑰必須被開發(fā)者所掌握。這個(gè)證書的標(biāo)識(shí)是應(yīng)用程序的作者。這個(gè)證書不需要通過證書組織的簽署:An
3、droid應(yīng)用程序?qū)τ谑褂米院炇鸬淖C書是完全允許的和特別的。這個(gè)證書僅僅被用于與應(yīng)用程序建立信任關(guān)系,不是為了大規(guī)模的控制應(yīng)用程序可否被安裝。最重要的方面是通過確定能夠訪問原始簽名權(quán)限和能夠共享用戶ID的簽名來影響安全。用戶標(biāo)識(shí)和文件訪問安裝在設(shè)備中的每一個(gè)Android包文件(.apk)都會(huì)被分配給一個(gè)屬于自己的統(tǒng)一的Linux用戶ID,并且為它創(chuàng)建一個(gè)沙箱以防止影響其它應(yīng)用程序(或者其它應(yīng)用程序影響它)。用戶ID在應(yīng)用程序安裝到設(shè)備中時(shí)被分配,并且在這個(gè)設(shè)備中保持它的永久性。因?yàn)榘踩珗?zhí)行發(fā)生在進(jìn)程級(jí),所以一些不同包中的代碼在相同進(jìn)程中不能正常的運(yùn)行,自從他們需要以不同Linux用戶身份運(yùn)行
4、時(shí)。你可以使用每一個(gè)包中的AndroidManifest.xml文件中的manifest標(biāo)簽屬性sharedUserld擁有它們分配的相同用戶ID。通過這樣做,兩個(gè)包被視為相同的應(yīng)用程序的安全問題被解決了,注意為了保持安全,僅有相同簽名(和請(qǐng)求相同sharedUserId標(biāo)簽)的兩個(gè)應(yīng)用程序簽名將會(huì)給相同的用戶ID。應(yīng)用創(chuàng)建的任何文件都會(huì)被賦予應(yīng)用的用戶標(biāo)識(shí),并且,正常情況下不能被其它包訪問。當(dāng)你通過getSharedPreferences(String,int),openFileOutput(String,int)或者openOrCreateDatabase(String,int,SQLit
5、eDatabase.CursorFactory)創(chuàng)建一個(gè)新文件時(shí),你可以同時(shí)或分別使用MODEWORLDREADABLE和MODEWORLDWRITEABLE標(biāo)志允許其它包讀/寫此文件。當(dāng)設(shè)置了這些標(biāo)志時(shí),這個(gè)文件仍然屬于你的應(yīng)用程序,但是它的全局讀、寫和讀寫權(quán)限已經(jīng)設(shè)置所以其它任何應(yīng)用程序可以看到它。權(quán)限命名一個(gè)基本的Android應(yīng)用程序沒有與其相關(guān)聯(lián)的權(quán)限,意味著它不能做任何影響用戶體驗(yàn)或設(shè)備中的數(shù)據(jù)的有害操作。要利用這個(gè)設(shè)備的保護(hù)特性,在你的應(yīng)用程序需要時(shí),你必須在AndroidManifest.xml文件中包含一個(gè)或更多的標(biāo)簽來聲明此權(quán)限。例如:需要監(jiān)聽來自SMS消息的應(yīng)用程序?qū)⒁?/p>
6、定如下內(nèi)容:在安裝應(yīng)用程序時(shí),通過包安裝器應(yīng)用程序要通過權(quán)限請(qǐng)求的許可,使建立在與應(yīng)用程序簽名的核對(duì)下聲明對(duì)于用戶的那些權(quán)限和影響。在應(yīng)用運(yùn)行期間對(duì)用戶不做檢查:它要么在安裝時(shí)被授予特定的許可,并且使用想用的特性;要么不被授予許可,并且使得一切使用特性的嘗試失敗而不提示用戶。例如,sendBroadcast(Intent)方法就是當(dāng)數(shù)據(jù)被發(fā)送給到每個(gè)接收器時(shí)檢查許可的,在方法調(diào)用返回之后,因此當(dāng)許可失敗時(shí)你不會(huì)收到一個(gè)異常。然而,幾乎在所有例子中,許可失敗都會(huì)被打印到系統(tǒng)日志中。通常,多次的許可錯(cuò)誤會(huì)產(chǎn)生拋回至應(yīng)用程序的SecuhtyException異常。Android系統(tǒng)提供的許可可以在M
7、anifest.permission中找至以每個(gè)引用也可以定義和Enforce它自己的許可,因此這不是全面的所有可能的列表。在程序操作期間,個(gè)別權(quán)限在一些地方可能被強(qiáng)制: 在系統(tǒng)接到呼叫的時(shí)候,預(yù)防一個(gè)應(yīng)用程序去執(zhí)行特定的函數(shù)。 在啟動(dòng)Activity時(shí),防止一個(gè)應(yīng)用啟動(dòng)其它應(yīng)用程序的Activities。 發(fā)送和接收Intent廣播時(shí),控制誰能接收你的廣播或者誰能發(fā)送廣播給你。 在一個(gè)內(nèi)容提供器上訪問和操作時(shí)。 綁定或開始一個(gè)服務(wù)時(shí)。權(quán)限的聲明和支持為了執(zhí)行你自己的權(quán)限,你必須首先在你的AndroidManifest.xml中使用一個(gè)或多個(gè)permission標(biāo)簽聲明它們。例如,一個(gè)應(yīng)用程序
8、想用控制誰能啟動(dòng)一個(gè)activities,它可以為聲明一個(gè)做這個(gè)操作的許可,如下:屬性是必需的,告訴系統(tǒng)用戶應(yīng)如何處理應(yīng)用程序接到請(qǐng)求此權(quán)限的通知,或者在這個(gè)文檔中對(duì)這個(gè)權(quán)限的許可的描述。屬性是可選的,僅僅用于幫助系統(tǒng)為用戶顯示權(quán)限。通常,你要設(shè)置這些,向一個(gè)標(biāo)準(zhǔn)的系統(tǒng)組(列在android.Manifest.permissiongroup中),或者在更多的情況下要自定義。它更偏向于使用一個(gè)已經(jīng)存在的組,做為簡化的權(quán)限用戶界面顯示給用戶。注意:應(yīng)該為每個(gè)權(quán)限提供標(biāo)簽(label)和描述(description)。當(dāng)用戶瀏覽權(quán)限列表時(shí),它們可以為用戶展示字符資源,如(android:label)
9、或者一個(gè)許可的詳細(xì)信息(android:description)。標(biāo)簽(label)比較短,用幾個(gè)詞來描述該權(quán)限保護(hù)的關(guān)鍵功能。描述(description)應(yīng)該是一組句子,用于描述獲得權(quán)限的用戶可以做什么。我們寫描述的習(xí)慣是兩句話,第一句聲明權(quán)限,第二句警告用戶如果應(yīng)用許可該權(quán)限時(shí),會(huì)發(fā)生什么不好的事情。下面是一個(gè)CALL_PHONE權(quán)限的標(biāo)簽和描述的例子:directlycallphonenumbersAllowstheapplicationtocallphonenumberswithoutyourintervention.Maliciousapplicationsmaycauseunex
10、pectedcallsonyourphonebill.Notethatthisdoesnotallowtheapplicationtocallemergencynumbers.你可以在系統(tǒng)中通過shell命令adbshellpmlistpermissions查看權(quán)限當(dāng)前定義。特別,-s操作以簡單粗略的方式為使用者顯示權(quán)限:$adbshellpmlistpermissions-sAllPermissions:Networkcommunication:viewWi-Fistate,createBluetoothconnections,fullInternetaccess,viewnetworkst
11、ateYourlocation:accessextralocationprovidercommands,fine(GPS)location,mocklocationsourcesfortesting,coarse(network-based)locationServicesthatcostyoumoney:sendSMSmessages,directlycallphonenumbers在AndroidManifest.xml文件中支持權(quán)限通過AndroidManifest.xml文件可以設(shè)置高級(jí)權(quán)限,以限制訪問系統(tǒng)的所有組件或者使用應(yīng)用程序。所有的這些請(qǐng)求都包含在你所需要的組件中的androi
12、d:permission屬性,命名這個(gè)權(quán)限可以控制訪問此組件。Activity權(quán)限(使用標(biāo)簽)限制能夠啟動(dòng)與Activity權(quán)限相關(guān)聯(lián)的組件或應(yīng)用程序。此權(quán)限在Context.startActivity()和Activity.startActivityForResult()期間要經(jīng)過檢查;如果調(diào)用者沒有請(qǐng)求權(quán)限,那么會(huì)為調(diào)用拋出一個(gè)安全異常(SecuhtyException)。Service權(quán)限(應(yīng)用標(biāo)簽)限制啟動(dòng)、綁定或啟動(dòng)和綁定關(guān)聯(lián)服務(wù)的組件或應(yīng)用程序。此權(quán)限在Context.startService(),Context.stopService()和Context.bindService(
13、)期間要經(jīng)過檢查;如果調(diào)用者沒有請(qǐng)求權(quán)限,那么會(huì)為調(diào)用拋出一個(gè)安全異常(SecuhtyException)。BroadcastReceiver權(quán)限(應(yīng)用標(biāo)簽)限制能夠?yàn)橄嚓P(guān)聯(lián)的接收者發(fā)送廣播的組件或應(yīng)用程序。在Context.sendBroadcast()返回后此權(quán)限將被檢查,同時(shí)系統(tǒng)設(shè)法將廣播遞送至相關(guān)接收者。因此,權(quán)限失敗將會(huì)導(dǎo)致拋回給調(diào)用者一個(gè)異常;它將不能遞送到目的地。在相同方式下,可以使Context.registerReceiver()支持一個(gè)權(quán)限,使其控制能夠遞送廣播至已登記節(jié)目接收者的組件或應(yīng)用程序。其它的,當(dāng)調(diào)用Context.sendBroadcast()以限制能夠被允許接
14、收廣播的廣播接收者對(duì)象一個(gè)權(quán)限(見下文)。ContentProvider權(quán)限(使用標(biāo)簽)用于限制能夠訪問ContentProvider中的數(shù)據(jù)的組件或應(yīng)用程序。(Contentproviders有一個(gè)重要的附加安全設(shè)施可用于它們調(diào)用被描述后的URI權(quán)Bgo)不同于其它組件,它有兩個(gè)不相連系的權(quán)限屬性要設(shè)置:android:readPermission用于限制能夠讀取提供器的組件或應(yīng)用程序,android:writePermission用于限制能夠?qū)懭胩峁┢鞯慕M件或應(yīng)用程序。注意,如果一個(gè)提供者的讀寫權(quán)限受保護(hù),意思是你只能從提供器中讀,而沒有寫權(quán)限。當(dāng)你首次收回提供者(如果你沒有任何權(quán)限,將會(huì)
15、拋出一個(gè)SecurityException異常),那么權(quán)限要被檢查,并且做為你在這個(gè)提供者上的執(zhí)行操作。使用ContentResolver.query()請(qǐng)求獲取讀權(quán)限;使用ContentResolver.insert(),ContentResolver.update()和ContentResolver.delete()請(qǐng)求獲取寫權(quán)限。在所有這些情況下,一個(gè)SecurityException異常從一個(gè)調(diào)用者那里拋出時(shí)不會(huì)存儲(chǔ)請(qǐng)求權(quán)限結(jié)果。發(fā)送廣播時(shí)支持權(quán)限當(dāng)發(fā)送一個(gè)廣播時(shí)你能總指定一個(gè)請(qǐng)求權(quán)限,此權(quán)限除了權(quán)限執(zhí)行外,其它能發(fā)送Intent到一個(gè)已注冊(cè)的BroadcastReceiver的權(quán)限均
16、可以。通過調(diào)用Context.sendBroadcast()及一些權(quán)限字符串,為了接收你的廣播,你請(qǐng)求一個(gè)接收器應(yīng)用程序必須持有那個(gè)權(quán)限。注意,接收者和廣播者都能夠請(qǐng)求一個(gè)權(quán)限。當(dāng)這樣的事發(fā)生了,對(duì)于Intent來說,這兩個(gè)權(quán)限檢查都必須通過,為了交付到共同的目的地。其它權(quán)限支持任意一個(gè)好的粒度權(quán)限都能夠在一些調(diào)用者的一個(gè)服務(wù)中被執(zhí)行。和Context.checkCallingPermission()method.方法一起被完成。調(diào)用并產(chǎn)生一個(gè)需要的權(quán)限字符串,它將返回一個(gè)整型,以確定當(dāng)前調(diào)用進(jìn)程是否被許可。注意,僅僅當(dāng)你執(zhí)行的調(diào)用進(jìn)入到其它進(jìn)程的時(shí)候這些才會(huì)被使用,通常,通過IDL接口從一個(gè)
17、服務(wù)發(fā)布,或從一些其它方式通知其它進(jìn)程。這有許多其它有益的方式去檢查權(quán)限。如果你有一個(gè)其它進(jìn)程的PID,你可以使用上下文的方法Context.checkPermission(String,int,int)檢查權(quán)限違反PID。如果你有一個(gè)其它應(yīng)用程序的包名,你可以使用直接的包管理器方法PackageManager.checkPermission(String,String)去查看特定的包是否被指定的權(quán)限所許可。URI權(quán)限迄今為止,在與內(nèi)容提供器共同使用時(shí),標(biāo)準(zhǔn)權(quán)限系統(tǒng)描述通常是不充分的。一個(gè)內(nèi)容提供器要保護(hù)它自己及讀和寫權(quán)限,當(dāng)為了它們產(chǎn)生作用,它的直接客戶端總是需要手動(dòng)的對(duì)其它應(yīng)用程序指定UR
18、I。一個(gè)典型的例子是郵件應(yīng)用程序中的附件。訪問郵件的權(quán)限應(yīng)該被保護(hù),因?yàn)檫@是敏感用戶數(shù)據(jù)。可以,如果一個(gè)網(wǎng)址圖片附件提供給一個(gè)圖片查看器,那個(gè)圖片查看器將沒有權(quán)限打開這個(gè)附件,因?yàn)樗鼪]有原因去擁有一個(gè)權(quán)限從而不能訪問所有的電子郵件。對(duì)于這個(gè)問題的解決是通過網(wǎng)址權(quán)限:當(dāng)開始一個(gè)活動(dòng)或?qū)σ粋€(gè)活動(dòng)返回一個(gè)結(jié)果,調(diào)用者可通過設(shè)置Intent.FLAGGRANTREADURIPERMISSION和Intent.FLAGGRANTWRITEURIPERMISSION中的一個(gè)或者兩個(gè)。允許接收活動(dòng)權(quán)限訪問在Intent中特定的數(shù)據(jù)地址,不論它有權(quán)限訪問數(shù)據(jù)在內(nèi)容提供器相應(yīng)的Intent中。這種機(jī)制允許一個(gè)公用的功能性模型使用戶相互
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 6346.2301-2025電子設(shè)備用固定電容器第23-1部分:空白詳細(xì)規(guī)范表面安裝金屬化聚萘二甲酸乙二醇酯膜介質(zhì)直流固定電容器評(píng)定水平EZ
- 2026年農(nóng)業(yè)高技能人才培育策略
- 2026年呼叫中心服務(wù)質(zhì)量提升課程
- 2026河南南陽市市直機(jī)關(guān)遴選公務(wù)員37人備考題庫帶答案詳解
- 隱形技術(shù)的定義
- 職業(yè)噪聲工人心血管疾病一級(jí)預(yù)防實(shí)踐
- 職業(yè)健康監(jiān)護(hù)策略研究
- 職業(yè)健康大數(shù)據(jù)在職業(yè)病鑒定中的應(yīng)用
- 職業(yè)健康中的人機(jī)適應(yīng)性研究
- 齊齊哈爾2025年黑龍江齊齊哈爾龍江縣選調(diào)中小學(xué)校醫(yī)筆試歷年參考題庫附帶答案詳解
- 飛機(jī)場建設(shè)合同
- 中小學(xué)建筑設(shè)計(jì)規(guī)范2022年
- 海倫司小酒館創(chuàng)業(yè)計(jì)劃書
- 工程財(cái)務(wù)管理制度
- 預(yù)制渡槽吊裝施工專項(xiàng)方案
- 屋面光伏系統(tǒng)安裝要求
- 魯迅《為了忘卻的紀(jì)念》散文全文
- 四位數(shù)乘四位數(shù)乘法題500道
- 二次根式的化簡與最簡二次根式
- YS/T 377-2010標(biāo)準(zhǔn)熱電偶用鉑銠10-鉑偶絲
- 醫(yī)院消毒滅菌效果環(huán)境衛(wèi)生學(xué)監(jiān)測(cè)報(bào)告單(檢驗(yàn))
評(píng)論
0/150
提交評(píng)論