自 Android 5.0 Lollipop(API 21)起,各主要 Android 版本的重要安全增强。
WebView 是一个单独的软件包,参见 Android 5.0 安全增强和 The Updatable WebView on Android 5.0 Lollipop What Is It and Why Should You Care?isInsideSecureHardware)用于检查 KeyStore 密钥是否存储在_安全硬件_(例如可信执行环境(TEE)或安全元件(SE))中,参见 KeyInfo 的 isInsideSecureHardware 方法WebView 中的 JavaScript 求值在独立进程中运行,因此 JavaScript 代码更难访问应用的内存,参见 WebView 安全的新变化和 Android 8.0 所有应用行为变更中的安全部分WebView 遵循网络安全配置和 cleartextTrafficPermitted 标志(在旧版 Android 上,即使配置不允许_明文流量_,它也会加载 HTTP 站点),参见 Android 8.0 面向 Android 8.0 应用的行为变更中的安全部分WebView 新增安全浏览 API,启用后,用户尝试导航到可能不安全的网站时会收到警告(由 Google 安全浏览验证),参见 Android 8.0 功能与 API 中的 WebView API 部分FLAG_SECURE Window 标志得到更多支持,可禁止对设置了该标志的屏幕进行截图cleartextTrafficPermitted 设为 true(不推荐),参见 面向 API 28+ 应用的行为变更中的默认启用网络 TLS 部分和 Android: Cleartext HTTP traffic not permitted Android 9WebView 默认禁用文件访问,参见 WebSettings 的 setAllowFileAccess 方法taskAffinity 设置为与目标应用相同,以诱使用户启动它,即使用户本意是启动目标应用并使用了其合法的应用图标)不再可能,参见 StrandHogg 攻击 / 任务亲和性漏洞和 Strandhogg 漏洞requestLegacyExternalStorage 选择退出,参见 Android 11 中的存储更新和 Android 存储使用场景与最佳实践中的在生产应用中退出部分setView 设置)的 Toast 不能再从后台启动。这是为了缓解某些依赖这些视图遮挡受害应用 UI 的 点击劫持攻击。请注意,整个 setView 方法在 Android 11(API 30)中已被弃用。参见 android:exported 标志,请参阅 Behavior changes: Apps targeting Android 12 中的更安全的组件导出部分requestLegacyExternalStorage 选择退出,请参阅 Android storage use cases and best practices 中的在生产应用中选择退出部分BiometricPrompt 进行身份验证的应用提供本地化字符串。POST_NOTIFICATIONS 运行时权限,用于从应用发送非豁免(包括_前台服务_(FGS))通知,请参阅 Notification runtime permission 和 android.permission.POST_NOTIFICATIONSapksigner 进行的新密钥轮换默认将使用 v3.1 签名方案,以面向 Android 13 及更高版本进行轮换。targetSdk 要求:面向 Android 6(API 23)之前版本的应用将无法安装。这意味着你可以认为 Android 6(API 23)引入的安全限制(此处尤指运行时权限处理)现在适用于设备上安装的所有应用(这一最低要求预计会随未来 Android 版本逐步提高),请参阅 Behavior changes: all apps 中的 Minimum installable target API level 部分QUERY_ALL_PACKAGES 权限——该权限需要通过特殊的人工 Google Play 审核才能获得),请参阅 Behavior changes: all apps 中的 Media owner package names might be redacted 部分Exception,请参阅 Behavior changes: Apps targeting Android 14 or higher 中的更安全的动态代码加载部分PendingIntent 创建者现在默认阻止后台 Activity 启动,请参阅 Behavior changes: Apps targeting Android 15 or higher 中的 Other changes 部分PendingIntent 创建者允许后台 Activity 启动权限,或者发送者具有后台 Activity 启动权限,请参阅 Behavior changes: Apps targeting Android 15 or higher 中的 Other changes 部分Android 16 安全发行说明* 针对普遍的 Intent 重定向攻击增加了默认安全性,阻止启动从其他应用收到的 Intent,例如作为 extra 包装在启动当前应用的 Intent 中,请参阅行为变更:所有应用中的“针对 Intent 重定向攻击的改进安全性”部分
RESULT_DISCOVERY_TIMEOUT 收到发现超时通知。取而代之的是,系统通过可视化对话框通知用户超时事件。当用户关闭该对话框时,应用会通过 RESULT_USER_REJECTED 收到关联失败的通知,请参阅行为变更:所有应用中的“配套应用不再收到发现超时通知”部分MediaStore#getVersion() 现在对每个应用都是唯一的。这将从版本字符串中移除可识别属性,以防止滥用及被用于指纹识别技术,请参阅行为变更:面向 Android 16 或更高版本的应用中的“MediaStore 版本锁定”部分以及 MediaStore 的 getVersion 方法KeyDescription 结构中包含一个新的 moduleHash 字段,可用于验证已加载 APEX 模块的完整性,请参阅 Android 16 版本说明中的“设备完整性”部分和READ_CONTATCS 权限即可与您的应用分享联系人,请参阅功能与 API 中的“Android 联系人选择器”部分KeyStoreException,请参阅行为变更:所有应用中的“每应用密钥库限制”部分FLAG_SECURE 标志被添加到生物识别或设备凭据(PIN、图案_或_密码)提示中,包括解锁设备和应用中的 BiometricPrompt。这意味着你无法截取这些屏幕,并且在屏幕共享中它们也会显示为黑屏,请参阅 Android Code Search 上的 com.android.systemui.biometrics.AuthContainerView 源码nullPendingIntent 的创建者被视为_外部 Intent 的发送者_,而不是_待处理 Intent 的发送者_,请参阅 Behavior changes: Apps targeting Android 15 or higher 中的 Safer Intents 部分BiometricPrompt 行为上的变化:它在生物识别失败后不能“回退”到设备凭据来完成用户身份验证。请注意,如果该验证方式被允许(且用户尚未多次失败),用户仍然可以_自愿_通过提示框上的按钮使用设备凭据。当设备被锁定时,提示将被取消,需要在设备解锁后触发新的提示才能成功完成身份验证。请参阅 Android 15 确保小偷即使偷走你已解锁的手机也无法清空你的银行账户