当前位置: 首页 > news >正文

Android 安全开发涉及多个层面,包括应用层(Kotlin/Java)、系统层、数据存储、网络通信、权限管理、代码混淆与反逆向等

Android 安全开发涉及多个层面,包括应用层(Kotlin/Java)、系统层、数据存储、网络通信、权限管理、代码混淆与反逆向等。在 Kotlin 和 Java 中进行 Android 安全编码时,需重点关注以下核心实践:

1. 权限安全

  • 动态申请危险权限(ActivityCompat.requestPermissions/ActivityResultLauncher
  • 避免在AndroidManifest.xml中过度声明权限(如REQUEST_IGNORE_BATTERY_OPTIMIZATIONS需明确业务必要性)
  • 使用android:permission保护自定义组件(如BroadcastReceiver

2. 数据存储安全

  • 敏感数据禁用SharedPreferences明文存储 → 改用EncryptedSharedPreferences(Jetpack Security Crypto)
  • 数据库加密:使用SQLCipherRoom+SQLCipher;避免getDatabasePath()暴露路径
  • Internal Storage默认私有,但MODE_WORLD_READABLE/WRITEABLE(已废弃)绝对禁用

3. 网络安全

  • 强制启用android:usesCleartextTraffic="false"(API 28+ 默认为 false)
  • 使用Network Security Configres/xml/network_security_config.xml)配置证书固定(Certificate Pinning)
  • OkHttp 中集成CertificatePinner,防止中间人攻击

4. WebView 安全

  • 禁用setJavaScriptEnabled(true)除非绝对必要;若启用,必须同时禁用setAllowFileAccess(false)setAllowContentAccess(false)
  • 使用WebViewClient.shouldOverrideUrlLoading()防止外部浏览器劫持
  • Kotlin 示例(安全初始化 WebView):
webView.settings.apply{javaScriptEnabled=falseallowFileAccess=falsedomStorageEnabled=falsedatabaseEnabled=false}

5. 代码与资源防护

  • 启用 R8/ProGuard:minifyEnabled true+shrinkResources true,移除调试日志(Log.d等)
  • 敏感字符串(如 API Key)禁止硬编码 → 使用构建变量或安全密钥管理服务(如 Android Keystore +KeyGenParameterSpec.Builder
  • Keystore 示例(Kotlin 生成 AES 密钥):
valkeyStore=KeyStore.getInstance("AndroidKeyStore").apply{load(null)}valkeyGenerator=KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES,"AndroidKeyStore")keyGenerator.init(KeyGenParameterSpec.Builder("my_key",KeyProperties.PURPOSE_ENCRYPTorKeyProperties.PURPOSE_DECRYPT).setBlockModes(KeyProperties.BLOCK_MODE_GCM).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE).setKeySize(256).build())keyGenerator.generateKey()

6. 组件暴露风险

  • Activity/Service/BroadcastReceiver/ContentProvider默认exported="false"(Android 12+ 强制要求显式声明)
  • ContentProvider若需导出,务必设置android:permission并校验调用方 UID/PID

⚠️ 注意:Kotlin 与 Java 在安全逻辑上无本质差异,但 Kotlin 的空安全(?/!!)、不可变集合(listOf())、作用域函数(let/run)可减少 NPE 和误用风险,提升代码健壮性。

// ✅ 安全读取加密 SharedPrefs(Jetpack Security)valmasterKey=MasterKey.Builder(context).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build()valencryptedPrefs=EncryptedSharedPreferences.create(context,"secret_prefs",masterKey,EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)

android.security Kotlin |Java
Provides access to a few facilities of the Android security subsystems.
Interfaces
KeyChainAliasCallback The KeyChainAliasCallback is the callback for KeyChain#choosePrivateKeyAlias.
Classes
AttestedKeyPair The AttestedKeyPair class contains a KeyPair instance of keys generated by Keystore and owned by KeyChain, as well as an attestation record for the key.
ConfirmationCallback Callback class used when signaling that a prompt is no longer being presented.
ConfirmationPrompt Class used for displaying confirmation prompts.
ConfirmationPrompt.Builder A builder that collects arguments, to be shown on the system-provided confirmation prompt.
FileIntegrityManager This class provides access to file integrity related operations.
KeyChain The KeyChain class provides access to private keys and their corresponding certificate chains in credential storage.
KeyPairGeneratorSpec This class was deprecated in API level 23. Use KeyGenParameterSpec instead.
KeyPairGeneratorSpec.Builder This class was deprecated in API level 23. Use KeyGenParameterSpec.Builder instead.
KeyStoreParameter This class was deprecated in API level 23. Use KeyProtection instead.
KeyStoreParameter.Builder This class was deprecated in API level 23. Use KeyProtection.Builder instead.
NetworkSecurityPolicy Network security policy.
Exceptions
ConfirmationAlreadyPresentingException This exception is thrown when presenting a prompt fails because another prompt is already being presented.
ConfirmationNotAvailableException This exception is thrown when presenting a prompt fails because the the environment lacks facilities for showing confirmations.
KeyChainException Thrown on problems accessing the KeyChain.

http://www.jsqmd.com/news/584642/

相关文章:

  • 为什么你的程序体积持续增长?Bloaty终极二进制分析工具帮你找到答案
  • vLLM-v0.17.1效果展示:多LoRA热切换,支持10+垂类模型动态加载
  • Passbolt API完整指南:解锁团队密码管理的终极接口手册
  • OpenClaw飞书机器人配置:Qwen3-4B模型对话触发实战
  • PyJWT与云原生应用集成的终极指南:如何构建安全的微服务架构
  • 告别回调地狱:PromiseKit函数式三剑客拯救异步代码
  • 双模型协作!OpenClaw同时调用Qwen3-4B与Codex完成编程任务
  • 终极指南:3步解决Refine项目TypeScript版本冲突问题
  • yaml-cpp constexpr终极优化:编译期YAML解析的完整指南
  • 终极iOS开发指南:如何快速构建自定义Shimmer动画效果插件
  • OpenClaw部署指南:2026年百度云部署OpenClaw、配置百炼API、集成Skill、接入微信/QQ/飞书/钉钉步骤
  • Lux测试框架完整指南:如何编写高效的数据可视化测试用例
  • 如何为yaml-cpp开发Clang-Tidy静态分析检查器:C++代码质量提升终极指南
  • Stable Yogi Leather-Dress-Collection参数详解:CFG Scale对皮衣轮廓硬朗感的调控作用
  • 图文对话AI快速部署:Qwen3-VL-WEBUI Docker实战教程
  • 终极指南:如何使用Pts与TensorFlow.js打造惊艳的AI创意编程项目
  • 终极指南:At.js如何让你的应用拥有GitHub级别的智能补全功能
  • SagerNet数据库架构完全指南:Room与DataStore在代理工具中的最佳实践
  • 【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程
  • yaml-cpp代码文档化终极指南:从Doxygen注释到完美文档输出
  • 数据科学工作流革命:如何用Lux在10分钟内提升数据分析效率
  • OpenClaw学术研究助手:Qwen3-14b_int4_awq自动生成文献综述
  • Android-Touch-Helper通知管理终极指南:掌握跳过状态和统计信息
  • React学习路径终极指南:从零基础到高级开发的完整成长路线
  • mybatis plus 更新的时候返回更新记录的条数
  • hello-uniapp启动图与欢迎页设计:第一印象很重要
  • ThinkJS路由系统终极指南:构建RESTful API的10个最佳实践
  • 终极指南:Skateshop中的响应式设计与Tailwind CSS最佳实践
  • 【回眸】系统读书笔记(十)盘点调动资源
  • 如何通过依赖注入设计模式提升yaml-cpp代码可测试性:完整指南