2011-10-04 35 views
11

我正在研究我的android應用程序的安全性問題。如何在應用程序間發送數據時保護意圖數據

我想了解一下,而從一個應用程序發送到另一個,以確保意圖數據及附加,這樣除了這兩個之外沒有其他的應用程序可以窺探它的方式。

一種蠻力的方法是使用Android的加密解密編碼意圖數據,有沒有更好的方法來達到同樣的?

在此先感謝。

回答

0

我的猜測是,如果你使用一個明確的意圖,即指定類,其意圖是將被髮送到,再沒有其他的類可以攔截意圖,並期待在它的數據。
但是,如果應用程序中您嘗試將信息發送到更改的類名稱,則此方法可能會失敗。

0

如果意圖指定目標,也就是發送方應用程序包的一部分,那麼其他應用程序將沒有捕捉到它的機會,它將被交付給指定的接收者。另一方面,如果向其他應用程序發送意圖,則不會保證意圖的接收者將成爲您期望的實現:如果將意圖發送給com.mycompany.security.SecureReceiver,但不是您的應用程序,而是使用給定的類描述來安裝另一個應用程序,而不是將您的意圖發送給該應用程序。

另外Android是一個開放系統。如果有人編譯他自己的應用程序框架,那麼他可以操縱Intent交付系統。

是否想要保護用戶或惡意應用程序的數據?

5

正如在其他的答案指出,雖然你可以發送意向完全合格的活動,沒有什麼可以阻止有人創建具有相同封裝的應用程序。

你可能要添加一個額外的安全步驟,這個方案:

  • 首先發送一個「挑戰」意圖遠程活動(應該,例如隱窩一個隨機字符串,你只要使用一個共享密碼並將其發回給您)

  • 如果第一個安全步驟正常,您可以使用其完全限定的活動將未加密的消息自由發送至此遠程應用程序。

這是非常蹩腳的安全性,它可能足以滿足您的需求。


請看下面的CommonsWare註釋。

另一種更安全的方式可能是將您的活動編碼爲綁定服務,保持挑戰步驟,但在一個更私人的通信意味着。

+3

「沒有什麼可以阻止有人創建具有相同封裝的應用程序」 - 注意,兩個應用程序不能在同一臺設備上,在具有相同軟件包的同時安裝。話雖如此,你的觀點非常有效,因爲溝通渠道的任何一方都可能被替代品欺騙。更不用說所有的'Intent' extras對''intents'的所有應用程序都是可見的,'startActivity()'(http://commonsware.com/blog/2011/06/30/warning-activity-intent-extras- public.html)。 – CommonsWare

+0

哇,我不知道這一點,感謝您的鏈接。也許你可以通過阻止你的活動使用正確的標誌出現在recentTasks列表中來解決這個問題? (或改爲使用_bound_服務) –

+0

AFAIK,無法攔截使用AIDL通過綁定服務傳輸的數據。還有一個問題是想出一些機制來阻止一方被另一個欺騙通信的應用所取代。 – CommonsWare

相關問題