| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 应用安全 -> 正文阅读 |
|
[移动开发]Android 应用安全 |
应用安全一、客户端程序安全安装包签名Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!(宣布所有权) Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。 这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。 应用完整性校验漏洞危害:损害开发者的知识产权,同时可能威胁到用户的敏感信息及财产安全。 解决:防止签名串改(加固) 反编译保护做加壳处理、加固处理 调试安全在Android中的AndroidManifest.xml文件中有一项是debuggable属性,意为“可调试”,有true和false两种模式。 默认情况下我们都是需要设置的,如果打包的是debug版本的apk文件,那么这个debuggable属性就自动设置为true,反之,如果打包的是release版本的apk文件,那么这个debuggable属性就自动设置为false。 扩展: 任意备份风险漏洞危害 解决: allowBackup : 屏幕截屏安全漏洞漏洞危害 用户某些隐私内容会暴露给攻击者。 解决:
注意时机需要在setContentView(R.layout.activity_main)之前。 二、数据安全shared_prefsshared_prefs 的数据是明文存在xml文件中,不安全,需要加密 直接用MMKV替代即可。 数据库需要把关键信息加密处理 内存缓存使用内存缓存,可一定的保证数据安全 使用内存缓存文件:
加密工具加解密(Cipher) 三、通信安全网络通信安全通讯协议安全 使用HTTPS就OK 证书安全 用的是预埋证书的话,存在安全隐患。 证书有效性 用SSL pinning(证书锁定)技术,验证服务器证书的有效性,避免风险。 蓝牙通信安全三、组件安全四大组件的安全和暴露什么情景下,调用startActivity可以启动为了知道了解安全和暴露,首先要知道什么情景下,调用startActivity可以启动。 如下,可以成功startActivity而不会得到permission denial : 1、同一个application下 2、Uid相同 3、permission匹配 4、目标Activity的属性Android:exported=”true” 5、目标Activity具有相应的IntentFilter,存在Action动作或其他过滤器并且没有设置exported=false 6、启动者的Pid是一个System Server的Pid 7、启动者的Uid是一个System Uid(Android规定android.system.uid=1000,具有该Uid的application,我们称之为获得Root权限) 如果上述调节,满足一条,一般即可(与其他几条不发生强制设置冲突),否则,将会得到Permission Denial的Exception而导致Force Close。 接下来,介绍相关参数。 android:exported意义: 值的含义: android:exported的默认值: 1.主动设置(显示设置) 2.被动设置(隐式设置) 2.1.没有设置 intent-filter 的场景:
2.2.设置了 intent-filter 的场景:
2.3.Content Provider 区别于其他三个组件 Content Provider 区别于其他三个组件,它没有 intent-filter 属性,它的隐式默认值是和Sdk版本有关。 android sharedUserId介绍: 通常,不同的APK会具有不同的userId,因此运行时属于不同的进程中,而不同进程中的资源是不共享的,在保障了程序运行的稳定。然后在有些时候,我们自己开发了多个APK并且需要他们之间互相共享资源,那么就需要通过设置shareUserId来实现这一目的。 通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样。 使用: 在需要共享资源的项目的每个AndroidMainfest.xml中添加shareuserId的标签。 android:sharedUserId=“com.example” id名自由设置,但必须保证每个项目都使用了相同的sharedUserId。一个mainfest只能有一个Shareuserid标签。
sharedUserId功能强大,使用sharedUserId后,基本上可以认为是一个App。 android:permission意义: Android提供了Permission检查机制来控制了一个应用拥有哪些执行权利,例如应用拥有读写存储权限才能拥有读写设备存储的文件的权利,那么是否能通过权限来控制一个应用是否有启动该activity的权利呢?答案显而易见。 Android提供了自定义权限的能力,应用可以定义自己的权限,如下方式展示了如何在Manifest自定义一个Permission:
那么权限的定义完成了,如何使用它来保护暴露的组件呢,如下所示:
如上,在activity声明时,activity标签下有一个permission,通过permission的name就能指定保护该activity的权限,这样,只有具有了该权限的activity才能启动它,注意在定义方和使用方都要定义和声明自定义的权限。 根据场景控制四大组件的安全和暴露根据被调用的场景,将被调用的场景分为3种:封闭式、半封闭式和开放式 封闭式只要android:exported=“false”,就是封闭式
半封闭式使用android:sharedUserId ,满足合作需求
使用android:permission ,满足多方合作需求
封闭式和半封闭式都可以认为是安全的。 开放式可以被任何App调用 WebView组件安全和暴露参考和转载地址Android中allowBackup属性的含义和危险性实例讲解 : https://blog.csdn.net/qq_31387043/article/details/51452782 Android sharedUserId 使用:https://www.cnblogs.com/w-y-f/p/4019388.html Android中startActivity中的permission检测与UID机制:https://blog.csdn.net/zjd934784273/article/details/83349097 Android暴露组件——被忽略的组件安全:https://blog.csdn.net/wsq_tomato/article/details/83349812 结合源码谈谈Activity的exported属性:https://blog.csdn.net/weixin_38503885/article/details/80653809 浅谈Android安全:https://www.jianshu.com/p/fe0206f8be5b |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:39:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |