2012-03-30 87 views
0

我對內容提供者使用SqlCipher。現在,當我想鎖定應用程序時,我只是清除緩存的密碼。不過,該應用可以繼續使用任何打開的遊標。這意味着重新打開該應用將授予訪問敏感數據的權限。如果應用程序沒有密碼,我會通過重定向到登錄屏幕解決此問題。SqlCipher打開遊標是否有安全問題?

但是,我擔心這些打開的遊標是否存在任何安全問題,或者我是否應該繼續阻止UI訪問而不擔心? SqlCipher的文檔表示,它可以即時讀取/寫入加密頁面,而不是解密整個數據庫,這讓我認爲打開的遊標仍然安全。

這裏主要關注的是有人丟失手機,然後知識豐富的人可以使用這些打開的光標來提取敏感數據。

回答

0

我沒有看過Android遊標的SQLCipher細節,但通常在Android遊標中將整個結果集保存在堆空間中,而在SQLCipher的情況下,那些將由該點解密。

但是,由於這些遊標對於您的進程是私有的,因此除了通過您的用戶界面之外,任何人都無法獲得這些遊標,Linux/Android進程隔離的禮貌。如果您的用戶界面不允許任何人通過再次登錄獲得任何地方,則您的保護得到了很好的保護。問題的關鍵在於您是否確定您的UI沒有任何會繞過登錄的無意代碼路徑(例如最近的任務列表)並允許訪問數據。

+0

關於無意的代碼路徑。我的第一次嘗試是編寫一個自定義的Activity類,對所有可能的入口點(onCreate,newIntent等)執行檢查,然後擴展該安全活動類。事實證明這在理論上比實踐中更好。現在我只是重寫每個活動類中前面提到的每個入口點。不幸的是,這使我的應用程序重複代碼枯竭。有關如何更好地完成此任何想法?每當應用程序被鎖定時,我可以終止活動堆棧,並且只在主活動中執行檢查? – user1178479 2012-03-30 18:53:51

+0

@ user1178479:「每當應用程序被鎖定時,我可以終止活動堆棧,並且只在主要活動中執行檢查?」 - 如果鎖定應用程序是一些明確的操作,當您通過'startActivity()'調出鎖定活動時,可以使用'FLAG_ACTIVITY_CLEAR_TOP'和'FLAG_ACTIVITY_SINGLE_TOP'作爲'Intent'標誌來銷燬所有其他活動。 – CommonsWare 2012-03-30 18:56:11

+0

這很好,但是如果您的清單具有意圖過濾器(例如「action.view」)來啓動另一個活動,這是您從第一篇文章開始的觀點,那麼仍然有可能規避該方法。我想唯一能真正集中控制的方法是創建一個看門人活動,除了在鎖定時清除活動堆棧之外,所有意圖都要經過。但是這可能比它的價值更多的工作,並且幾乎使得清單無用。 – user1178479 2012-03-30 19:49:29