日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓应用安全指南 4.4.3 创建/使用服务高级话题

發(fā)布時間:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓应用安全指南 4.4.3 创建/使用服务高级话题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

安卓應(yīng)用安全指南 4.4.3 創(chuàng)建/使用服務(wù)高級話題

原書:Android Application Secure Design/Secure Coding Guidebook

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

4.4.3.1 導(dǎo)出屬性和意圖過濾器設(shè)置的組合(在服務(wù)情況下)

我們已經(jīng)本指南中解釋了如何在實現(xiàn)四種服務(wù)類型:私有服務(wù),公共服務(wù),伙伴服務(wù)和內(nèi)部服務(wù)。 下表中定義了每種導(dǎo)出屬性類型的許可設(shè)置,以及intent-filter元素的各種組合,它們AndroidManifest.xml文件中定義。 請驗證導(dǎo)出屬性和intent-filter元素與你嘗試創(chuàng)建的服務(wù)的兼容性。

表 4.4-3

導(dǎo)出屬性的值
TrueFalse
意圖過濾器已定義公共(不使用)
意圖過濾器未定義公共,伙伴,內(nèi)部私有

如果服務(wù)中的導(dǎo)出屬性是未指定的,服務(wù)是否公開由是否定義了意圖過濾器決定 [9];但是,在本指南中,禁止將服務(wù)的導(dǎo)出屬性設(shè)置為未指定。 通常,如前所述,最好避免依賴任何給定 API 的默認(rèn)行為的實現(xiàn); 此外,如果存在顯式方法來配置重要的安全相關(guān)設(shè)置,例如導(dǎo)出屬性,那么使用這些方法總是一個好主意。

[9] 如果定義了任何意圖過濾器,服務(wù)是公開的,否則是私有的。更多信息請見 https://developer.android.com/guide/topics/manifest/service-element.html#exported。

不應(yīng)該使用未定義的意圖過濾器和導(dǎo)出屬性false的原因是,Android 的行為存在漏洞,并且由于意圖過濾器的工作原理,可能會意外調(diào)用其他應(yīng)用的服務(wù)。

具體而言,Android 的行為如下,因此在設(shè)計應(yīng)用時需要仔細(xì)考慮。

  • 當(dāng)多個服務(wù)定義了相同的意圖過濾器內(nèi)容時,更早安裝的應(yīng)用中的服務(wù)是優(yōu)先的。
  • 如果使用顯式意圖,則優(yōu)先的服務(wù)將被自動選擇并由 OS 調(diào)用。

以下三張圖描述了一個系統(tǒng),由于 Android 行為而發(fā)生意外調(diào)用的。 圖 4.4-4 是一個正常行為的例子,私有服務(wù)(應(yīng)用 A)只能由同一個應(yīng)用通過隱式意圖調(diào)用。 因為只有應(yīng)用 A 定義了意圖過濾器(圖中的action ="X"),所以它的行為正常。 這是正常的行為。

圖 4.4-5 和圖 4.4-6 展示了一個情景,其中應(yīng)用 B 和應(yīng)用 A 中定義了相同的意圖過濾器(action ="X")。

圖 4.4-5 展示了應(yīng)用按A -> B的順序安裝。在這種情況下,當(dāng)應(yīng)用 C 發(fā)送隱式意圖時,私有服務(wù)(A-1)調(diào)用失敗。 另一方面,由于應(yīng)用 A 可以通過隱式意圖,按照預(yù)期成功調(diào)用應(yīng)用內(nèi)的私有服務(wù),因此在安全性(惡意軟件的對策)方面不會有任何問題。

圖 4.4-6 展示了一個場景,應(yīng)用以B->A的順序安裝。 就安全性而言,這里存在一個問題,應(yīng)用 A 嘗試通過發(fā)送隱式意圖來,調(diào)用應(yīng)用中的私有服務(wù),但實際上調(diào)用了之前安裝的應(yīng)用 B 中的公共活動(B-1)。 由于這個漏洞,敏感信息可能會從應(yīng)用 A 發(fā)送到應(yīng)用 B。 如果應(yīng)用 B 是惡意軟件,它會導(dǎo)致敏感信息的泄漏。

如上所示,使用意圖過濾器向私有服務(wù)發(fā)送隱式意圖,可能會導(dǎo)致意外行為,因此最好避免此設(shè)置。

4.4.3.2 如何實現(xiàn)服務(wù)

由于實現(xiàn)服務(wù)的方法是多種多樣的,應(yīng)該按安全類型進(jìn)行選擇,它由示例代碼分類,本文對各個特性進(jìn)行了簡要說明。 它大致分為使用startService和使用bindService的情況。 還可以創(chuàng)建在startService和bindService中都可以使用的服務(wù)。 應(yīng)該調(diào)查以下項目來確定服務(wù)的實現(xiàn)方法。

  • 是否將服務(wù)公開給其他應(yīng)用(服務(wù)的公開)
  • 是否在運行中交換數(shù)據(jù)(相互發(fā)送/接收數(shù)據(jù))
  • 是否控制服務(wù)(啟動或完成)
  • 是否作為另一個進(jìn)程執(zhí)行(進(jìn)程間通信)
  • 是否并行執(zhí)行多個進(jìn)程(并行進(jìn)程)

表 4.4-3 顯示了每個條目的實現(xiàn)方法類別和可行性。 “NG”代表不可能的情況,或者需要另一個框架的情況,它與所提供的函數(shù)不同。

表 4.4-4 服務(wù)的實現(xiàn)方法分類

類別服務(wù)公開相互發(fā)送/接收數(shù)據(jù)控制服務(wù)進(jìn)程間通信并行進(jìn)程
startService類型OKNGOKOKNG
IntentService類型OKNGNGOKNG
本地綁定類型NGOKOKNGNG
Messenger綁定類型OKOKOKOKNG
AIDL 綁定類型OKOKOKOKOK

startService類型

這是最基本的服務(wù)。 它繼承了Service類,并通過onStartCommand執(zhí)行過程。

在用戶方,服務(wù)由意圖指定,并通過startService調(diào)用。 由于結(jié)果等數(shù)據(jù)無法直接返回給源意圖,因此應(yīng)與其他方法(如廣播)結(jié)合使用。 具體示例請參考“4.4.1.1 創(chuàng)建/使用私有服務(wù)”。

安全性檢查應(yīng)該由onStartCommand完成,但不能用于伙伴服務(wù),因為無法獲取來源的軟件包名稱。

IntentService類型

IntentService是通過繼承Service創(chuàng)建的類。 調(diào)用方法與startService類型相同。 以下是與標(biāo)準(zhǔn)服務(wù)(startService類型)相比較的特征。

  • 意圖的處理由onHandleIntent完成(不使用onStartCommand)。
  • 由另一個線程執(zhí)行。
  • 過程將排隊。

由于過程是由另一個線程執(zhí)行的,因此調(diào)用會立即返回,并且面向意圖的過程由隊列系統(tǒng)順序執(zhí)行。 每個意圖并不是并行處理的,但根據(jù)產(chǎn)品的要求,它也可以作為選項來選擇,來簡化實現(xiàn)。由于結(jié)果等數(shù)據(jù)不能返回給源意圖,因此應(yīng)該與其他方法(如廣播)結(jié)合使用。 具體實例請參考“4.4.1.2 創(chuàng)建/使用公共服務(wù)”。

安全性檢查應(yīng)該由onHandleIntent來完成,但不能用于伙伴服務(wù),因為無法獲取來源的包名稱。

本地綁定類型

這是一種實現(xiàn)本地服務(wù)的方法,它僅工作在與應(yīng)用相同的過程中。 將類定義為從Binder類派生的類,并準(zhǔn)備將Service中實現(xiàn)的特性(方法)提供給調(diào)用方。

在用戶方,服務(wù)由意圖指定并使用bindService調(diào)用。 這是綁定服務(wù)的所有方法中最簡單的實現(xiàn),但它的用途有限,因為它不能被其他進(jìn)程啟動,并且服務(wù)也不能公開。 具體實現(xiàn)示例,請參閱示例代碼中包含的項目“PrivateServiceLocalBind服務(wù)”。

從安全角度來看,只能實現(xiàn)私有服務(wù)。

Messenger綁定類型

這是一種方法,通過使用Messenger系統(tǒng)來實現(xiàn)與服務(wù)的鏈接。

由于Messenger可以提供為來自服務(wù)用戶方的Message目標(biāo),因此可以相對容易地實現(xiàn)數(shù)據(jù)交換。 另外,由于過程要進(jìn)行排隊,因此它具有“線程安全”的特性。每個過程不可能并行,但根據(jù)產(chǎn)品的要求,它也可以作為選項來選擇,來簡化實現(xiàn)。 在用戶端,服務(wù)由意圖指定,通過bindService調(diào)用,具體實現(xiàn)示例請參見“4.4.1.4 創(chuàng)建/使用內(nèi)部服務(wù)”。

安全檢查需要在onBind或Message Handler中進(jìn)行,但不能 用于伙伴服務(wù),因為無法獲取來源的包名稱。

AIDL 綁定類型

這是一種方法,通過使用 AIDL 系統(tǒng)實現(xiàn)與服務(wù)的鏈接。 接口通過 AIDL 定義,并將服務(wù)擁有的特性提供為方法。 另外,回調(diào)也可以通過在用戶端實現(xiàn)由 AIDL 定義的接口來實現(xiàn),多線程調(diào)用是可能的,但有必要在服務(wù)端明確實現(xiàn)互斥。

用戶端可以通過指定意圖并使用bindService來調(diào)用服務(wù)。 具體實現(xiàn)示例請參考“4.4.1.3 創(chuàng)建/使用伙伴服務(wù)”。

安全性檢查必須在onBind中為內(nèi)部服務(wù)執(zhí)行,以及由 AIDL 為伙伴服務(wù)定義的接口的每種方法執(zhí)行。

這可以用于本指南中描述的所有安全類型的服務(wù)。

總結(jié)

以上是生活随笔為你收集整理的安卓应用安全指南 4.4.3 创建/使用服务高级话题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。