2012-09-23 14 views
5

我已經爲我的應用程序中的活動添加了意圖過濾器,以便其他應用程序可以通過我的應用程序訪問某些數據(來自雲)。但是,一些用戶可能有隱私問題,並且可能不太滿意他們使用的數據。但是,其他應用程序可以插入我的電腦,將其設置等備份到雲端。如何限制Android意圖或增加安全性

現在,我需要某種安全機制來限制哪些應用程序可以訪問我的應用程序,以便我可以禁止惡意應用程序等。雖然無法識別惡意應用程序,但我希望通過僅允許某種訪問控制某些「可信」的軟件包名稱。但是我無法找到如何做到這一點。

另一個選擇是添加權限要求,但這可以被更多的用戶忽略。雖然這將是用戶的錯誤(如果我不添加權限,這將是我的錯),但最近的應用程序已經暴露了用戶內容的巨大壓力。

第三個選項是每次提示用戶某個應用程序訪問我的。然而,我沒有包名,所以我不知道這個意圖來自哪裏。此外,我的應用可以自動從雲中進行某些傳輸,因此用戶可以「設置並忘記」該意圖。

我只是意圖在兩個不同的應用程序之間傳輸一些命令。我發現我必須自己實施保護措施,但如果谷歌已經有一些流量到位,我不想重新發明輪子。如果沒有,我將不得不實施我自己的認證流程或類似的東西。

編輯:我是小白,所以我用條款太鬆散。試圖讓問題更好。

更多關於應用程序。它可以自動從雲服務下載/上傳。通過發送意圖,另一個應用程序可以指定要下載或上傳的文件。如果用戶不知道,我不希望發生這種情況,所以當意圖進入時我會提示他,並且我接受數據。但是,應用程序也可以設置重複傳輸。雖然用戶現在被提示兩次(一次是權限,一次是意圖進入),但他沒有權利投訴。但是,這是可以接受的做法,還是我需要更多地以某種方式保護它。

回答

2

我想你應該看看功能Binder.getCallingUid得到調用進程的UID(然後它的packageName)或Binder.getCallingPid得到調用進程的PID,並從該PID discover的packageName調用進程的。要小心,多個軟件包可以使用相同的UID(如果它們僅使用相同的證書籤名)並且多個軟件包可以共享一個進程(但它們也應具有相同的UID)。

+0

據我所知,這隻適用於startActivityForResult而不是startActivity。這不是問題,只是想澄清。不幸的是,我不太瞭解Binder。 – thedesolatesoul

2

我在我的應用程序

無添加的意圖過濾器,你沒有。您已將<intent-filter>添加到<activity><service><provider>,但不添加到<application>

現在,我需要某種形式的安全機制來限制哪些應用可以訪問我的,讓我可以禁止惡意應用程序等

如何,確切的說,你打算確定「惡意應用程序「?

我的首選選項是我可以通過使用包名稱過濾意圖,從某些「可信提供商」啓用意圖。但是我無法找到如何做到這一點。

這不支持。

另一種選擇是添加權限要求,但這可以被更多的用戶忽略。

如果用戶「忽略」許可要求,他們沒有理由對「隱私問題」進行投訴。

但是我沒有包名,所以我不能告訴它的意圖來自哪裏。

在某些情況下,Yury的建議將起作用。

什麼是我的安全選項,當談到意圖

有一個在Android的沒有這樣的概念。 Intent s不具有「安全性」,任何超過整數都具有「安全性」。活動,服務和廣播接收器代表您的代碼,您的代碼可以實施安全措施以保護所述代碼。

還是這是IPC的錯誤方法?

既然你沒有註明你在爲IPC做什麼(除了它涉及到Intent對象,顯然),這是不可能回答這個問題的。

+1

我喜歡你的回答方式) – Yury

+0

我編輯了我的問題,使其更清晰。我想我使用的術語太鬆散了,並且不夠清楚。希望現在好一點。 – thedesolatesoul

+0

@thedesolatesoul:「發送一個意圖」 - 你的意思是「發送廣播」?你的意思是別的嗎? Android中沒有「發送意圖」的概念。 「但這是可接受的做法,還是我需要更多地保護它?」 - 這是您詢問當前或未來用戶的問題。 – CommonsWare

0

如果允許向您的應用發送意圖的唯一應用是您可以控制的應用,則可以爲您的應用創建<permission>,並將其安全級別設置爲「簽名」。這將限制對使用相同簽名密鑰簽名的應用程序的訪問。

<manifest ...> 
    ... 
    <permission name="com.thedesolatesoul.myapp.MY_ACCESS" 
     android:permissionLevel="signature" 
     android:label="@string/my_access_label" 
     android:description="@string/my_access_description" 
     /> 
</manifest> 

然後可以發送意圖到你的應用程序的唯一應用是那些在他們的清單由同一密鑰簽名的相應<uses-permission>條目。