阅读器应用程序的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mycoolreader"> <uses-permission android:name="com.mycoolcam.USE_COOL_CAMERA" /> <application android:label="My Cool Reader"> <provider android:name=".AllUserNotesContentProvider" android:authorities="com.mycoolreader.notes_provider" android:exported="true" android:permission="com.mycoolcam.USE_COOL_CAMERA" /> <!-- ... --> </application></manifest>乍一看,似乎一切都很好且安全,因为只有生态系统中的应用程序才能访问存储在 AllUserNotesContentProvider中的敏感信息 。
但是,如果受害者的设备只安装了阅读器应用程序会发生什么?在这种情况下,Android系统将不知道com.mycoolcam.USE_COOL_CAMERA权限声明的任何内容,因此默认情况下会将权限级别标记为normal 。
为防止出现这种情况,请确保在每个应用程序中也分别声明来自多个应用程序生态系统的每个权限 。
权限名称中的错别字
开发人员在权限名称中打错字是非常常见的:
<permission android:name="com.mycoolcam.USE_COOL_CAMERA" android:protectionLevel="signature" /><activity android:name=".CoolCamActivity" android:exported="true" android:permission="com.mycoolcam.USE_COOL_CAM"> <intent-filter> <action android:name="com.mycoolcam.LAUNCH_COOL_CAM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter></activity>在以上示例中,com.mycoolcam.USE_COOL_CAMERA的权限的保护等级为signature,而com.mycoolcam.USE_COOL_CAM的将被设置为normal 。这允许任意应用程序使用com.mycoolcam.USE_COOL_CAM进行使用权限声明,从而授予对CoolCamActivity活动的访问权 。
组件声明中的错别字
<permission android:name="com.mycoolcam.USE_COOL_CAMERA" android:protectionLevel="signature" /><activity android:name=".CoolCamActivity" android:exported="true" android:uses-permission="com.mycoolcam.USE_COOL_CAMERA"> <intent-filter> <action android:name="com.mycoolcam.LAUNCH_COOL_CAM" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter></activity>在以上示例中,它没有使用android:permission属性(设置组件的访问级别),而是使用android:uses-permission 。这将允许任何第三方应用程序访问它,因为这意味着该组件没有保护级别 。
权限保护不足
某些应用程序并没有完全保护他们使用的权限,这为第三方应用程序利用易受攻击的应用程序并获得权限留下了空间 。
让我们通过一个简单的例子更好地理解这一点 。
AndroidManifest.xml文件:
<uses-permission android:name="android.permission.READ_CONTACTS" /><provider android:name=".ContactsProvider" android:authorities="com.exampleapp.contacts" android:exported="true" />ContactsProvider.JAVA文件:
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, selection, selectionArgs, sortOrder); }
推荐阅读
- 中秋节有哪些美好的诗句?关于中秋的诗句 最美中秋诗词佳句
- 中医可以治疗甲状腺结节吗,中医教你治疗乳腺结节
- MIUI12开发版内测,miui12.5稳定内测-
- 三国演义中的五大虎将是谁?三国演义中虎威将军是谁
- 中药肾兰花的药用功效,男人生中最离不开的六大中药
- 房地产广告设计中的注意事项
- 中秋小制作用盘子?中秋小制作幼儿园_1
- 紫茶图片大全,中草药图片大全之麦冬
- 21个中华传统文化故事及其人生感悟?中华传统文化小故事励志
- ps怎么利用通道抠图详细步骤-在ps中如何用通道抠图-