-
-
[原创]移动应用安全与风控——应用的权限
-
发表于:
2023-5-30 15:24
22399
-
Android是一个权限分离的操作系统,每个应用都有独特的系统标识。正常情况下,应用本身没有权限执行对其它应用或系统产生危害的操作。应用都运行在访问权受限的沙盒中,当应用需要使用沙盒以外的资源时需要申请相应的权限,比如读写SDCard、读写联系人、调用摄像头等权限。
Android根据权限的危险程度分成了三种类别:
Android 5.0及之前的版本中应用申请的无论是普通权限还是危险权限,只需声明在应用的Manifest配置文件中,安装时权限将会被自动授予。为了提高系统的安全性和保护用户的隐私,谷歌在Android 6.0版本中针对危险权限开始使用新的权限管理模式动即态权限申请。应用使用危险权限时先在AndroidManifest.xml中声明对应的权限,以访问相机为例中先在其中添加相应的 <uses-permission> 元素进行权限声明,具体添加以下代码行:
应用运行中首次需要用到声明的危险权限时,要弹窗提示用户,用户自助决定是否授予或者拒绝申请的权限。若没有请求相应的权限而直接进行操作可能出现应用crash 的情况。弹窗提示用户效果如下图所示:
在Android上声明和请求运行时权限的工作流如下图所示:
Android 6.0 ~ Android 8.0版本中的应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中声明的其他权限一同授予,即同一组内的权限,只要有一个被同意,其它的都会被同意。在 Android 8.0 之后,此bug已被修复,只会授予应用明确请求的权限。
iOS一向以注重保护用户隐私而著称,因此iOS系统的权限审核相较于Android系统更加严格。苹果规定应用程序访问受保护的资源之前需要请求用户许可,可以理解为应用程序运行中涉及到用户隐私相关权限时都需要弹框提示,用户手动确认授权后方可使用。
同Android应用一样,iOS应用在使用权限前也需要进行注册声明。开发者需要将应用运行中用到的权限注册在Info.plist中,如果未在Info.plist中声明权限而直接使用将会导致应用出现Crash。权限在Info.plist中具体的注册格式如下图所示:
Info.plist中Key中填写应用中需要用到的权限,对应的Value中填写应用使用该权限的原因。Value中的填写的信息会在系统弹窗提示用户授权时展示给用户,具体形式图下图所示:
在iOS应用运行时请求权限的工作流如下图所示:
Android系统中如果用户拒绝授权使用敏感权限,开发者可以多次弹框提醒用户授权。iOS系统中只允许开发者弹框一次提示用户授权,如果用户拒绝后无法再次弹框寻求用户授权,只能引导去用户去系统的权限管理功能中手动授权。
<manifest >
<uses
-
permission android:name
=
"android.permission.CAMERA"
/
>
<application ...>
...
<
/
application>
<
/
manifest>
<manifest >
<uses
-
permission android:name
=
"android.permission.CAMERA"
/
>
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-7-7 07:46
被FIGHTING安编辑
,原因: