[英]Android - ContentProvider - custom permissions
內容提供商和自定義權限存在問題。
讓我們假設應用程序A的內容提供者包含了很棒的信息。 這些信息有點干擾,這就是為什么最好擁有閱讀權限的原因。
假設應用B是第三方應用程序,並且想要訪問A的內容提供者。
假設讀取內容提供者的權限為“ com.custom.a.readpermission”。
在清單中有:
<permission android:name="com.custom.a.readpermission"/> <provider android:name="com.a.provider.MyProvider" android:exported="true" android:authorities="com.a.provider.MyProvider" android:readPermission="com.custom.a.readpermission"/>
在B清單中,有:
<uses-permission android:name="com.custom.a.readpermission"/>
所以,現在,如果我安裝A; 之后,我安裝了B。B可以訪問數據了。
但是,如果我在A之前安裝B,則會得到:
java.lang.SecurityException: Permission Denial: opening provider com.a.provider.MyProvider requires com.custom.a.readpermission
那么,在這種情況下如何管理自定義權限?
那么,在這種情況下如何管理自定義權限?
您的主要選擇是:
使用內置系統權限,而不是自定義權限。 如果敏感數據的性質類似於已經由內置權限保護的其他數據,那么通常這是一個好主意。
捕獲此異常,並告訴用戶他們需要卸載A和B並以正確的順序安裝它們。
如果A和B都是同一作者,請使用protectionLevel
signature
權限,並且在A和B中都具有相同的<permission>
元素。那么安裝順序將無關緊要,並且用戶也不會被任何提示打擾同意此許可。
但是,請記住,在Android 5.0之前的版本中,選項#3起作用意味着,在A之前安裝的任何應用程序都可以執行與B相同的操作,除了將protectionLevel
從signature
降級為normal
。 這是一個已知的漏洞 。 Android 5.0要求自定義權限必須以“第一個獲勝”為基礎進行定義,並且試圖定義相同<permission>
的第二個及后續應用程序必須使用與實際定義它的應用程序相同的簽名密鑰進行簽名。
實際上,權限對於預安裝的應用程序和操作系統本身非常有用,但是在應用程序級別上定義自定義權限則...不盡人意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.