热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android开发安全手册

常规安全防御手段混淆混淆是Android基本安全手段,虽然目前有很多工具能够反混淆,但是对于反编译调试代码还是有较大作用的。加固目前有很多第三方加固服务可以使用。如爱加密、360加

常规安全防御手段

混淆

混淆是Android基本安全手段,虽然目前有很多工具能够反混淆,但是对于反编译调试代码还是有较大作用的。

加固

目前有很多第三方加固服务可以使用。如爱加密、360加密、阿里聚安全等。可以选择一个使用。但是也不能认为使用了加固就万事大吉了,因为还是有被脱壳的风险的。

安全风险规避

数据接口泄露风险

风险说明

数据接口被劫持,中间人攻击等。

风险规避

  1. 使用HTTPS协议。
  2. HTTPS证书双向校验,客户端校验服务端证书、域名等是否一致,服务端校验客户端证书是否正确(签名CA是否合法、证书是否是自签名、主机域名是否匹配、证书是否过期等)。

本地存储数据泄露风险

风险说明

Android提供四种Android本地存储方式,分别为Shared Preferences、SQLite Databases、Internal Storage、External Storage。对于一些不当的存储方式,可能会造成数据泄露。

风险规避

  1. 对于SP、Database和Internal Storage可以设置打开方式,原则上都使用MODE_PRIVATE。
  2. 谨慎使用sharedUserId属性。拥有相同sharedUserId 和签名的应用可以共享本地数据。所以拥有sharedUserId属性的应用一定要使用安全的证书签名。
  3. 谨慎使用External Storage,因为它能够被所有应用读取。
  4. 对于敏感信息,需要加密之后进行存储,如密码等。

硬编码密钥泄露风险

风险说明

将AES加密密钥、支付宝SDK密钥等硬编码在代码中容易被反编译获得。

风险规避

对密钥进行加密,在使用的时候解密获得。推荐使用阿里聚安全的sdk加密。

日志泄露风险

风险说明

打印在Log中的日志容易被调试获取一些信息,所以应该避免在Release版本中输出敏感日志。

风险规避

推荐使用Timber等日志框架。设置在Release版本中不输出日志。

WebView远程代码执行漏洞

风险说明

api16之前,可以通过js反射获取Java代码运行环境,然后进行远程代码执行。

风险防范

  1. 如果没有必要,设置WebView不支持Js接口调用。

    webView.getSettings().setJavascriptEnabled(false);

  2. 移除系统隐藏JS调用接口

    webView.removeJavascriptInterface("searchBoxJavaBridge_");
    webView.removeJavascriptInterface("accessibilityTraversal");
    webView.removeJavascriptInterface("accessibility");

  3. 如果WebView不需要支持打开第三方网页,则可以过滤第三方网页,只允许打开自己的网页。可以使用HTTPS证书校验、白名单等方式进行过滤。

  4. 使用不支持Js接口调用的WebView打开第三方网页。

WebView 明文存储密码漏洞

风险说明

在api17之前,WebView会把用户统一保存的密码明文存储在手机上。因此可能会泄露用户密码。

风险规避

WebView.setSavaPassword(false);

本地拒绝服务风险

如果Activity的exported属性为true,则它能够被外部打开。这时候如果外部传给该Activity的数据异常,则可能会使应用闪退。

如某个被攻击的Activity代码

MyClass object = (MyClass)getIntent().getSerializableExtra("my_class");

则如果攻击者代码为,会造成被攻击者的闪退。

Intent localIntent = new Intent();
localIntent.setComponent(new ComponentName(packageName, className));
localIntent.putExtra("my_class", new MalformedObject());
startActivity(localIntent);

风险规避

  1. 如非必要,不要设置Activity的exported属性为true。
  2. 在获取Intent数据时检测过滤并catch异常。

弱加密风险

风险说明

使用一些较容易破解的加密算法。

风险规避

  1. 使用对称加密算法时避免使用DES算法
  2. 使用RSA算法加密时不使用NoPadding
  3. IvParameterSpec初始化时,不使用常量vector
  4. 在选择加密模式时避免使用ECB模式
  5. 使用RSA加密时,建议密钥长度大于1024bit

推荐阅读
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • Web开发实践:创建连连看小游戏
    本文详细介绍了如何在Web环境中开发一款连连看小游戏,适合初学者和技术爱好者参考。通过本文,您将了解游戏的基本结构、连线算法以及实现方法。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • 本文探讨了在不同场景下如何高效且安全地存储Token,包括使用定时器刷新、数据库存储等方法,并针对个人开发者与第三方服务平台的不同需求提供了具体建议。 ... [详细]
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • 本文详细探讨了在Windows 98环境下安装Apache 1.3.9、JServ、GNUJSP 1.0、JDK 1.2.2及JSDK 2.0后遇到的中文显示问题,并提供了多种有效的解决方案。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
author-avatar
幸运的anan本人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有