今年 5 月,谷歌在 I/O 大会上宣布,Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言。数据库
Kotlin 是一种面向现代多平台应用程序的编程语言,成为谷歌开发 Android 应用程序的首选语言后,许多开发人员逐渐地从 Java 转向 Kotlin。根据最新的一项调查显示,有 62% 的开发人员使用 Kotlin 来构建移动应用程序,另有 41% 的开发人员使用 Kotlin 来构建 Web 后端项目。 编程
而随着 Kotlin 的出现,愈来愈多的知名组织越发重视移动应用程序的安全性。最近由 DHS 与 NIST 联合的一项关于移动设备安全研究发现,应用程序中的漏洞一般是没有遵循安全编码引发,这些漏洞会对用户的数据形成某种危害。后端
对于使用 Kotlin 开发人员来讲,熟悉这门语言并了解移动应用程序的安全编码是很是重要的。如下是在使用 Kotlin 时遇到的一些常见漏洞: 不安全数据存储 Android 生态系统为应用程序提供了几种存储数据的方法。开发人员使用的存储类型取决于几点:存储的数据类型、数据的使用以及数据是否应该保持私有或与其余应用程序共享。 而常见的编码错误是以明文存储敏感信息。例如,常常在应用程序使用的 “Shared Preference” 或数据库查找 API 密码、密码和 PII(Personally Identifiable Information),因为攻击者可以访问应用程序的数据库(根设备、应用程序的备份等),从而检索使用该应用的其余用户的凭据,这类疏忽愈来愈多地致使重要数据丢失。 安全
不安全通讯 目前,大多数移动应用程序在某种程度上以 client-server 的方式交换数据,当进行通讯时,用户数据就会在移动运营商网络、或者某些 WiFi 网络和互联网之间进行传输。正是这个过程,攻击者就能利用其中的某个弱环节发起攻击。若是数据传输没有使用 SSL/TLS 加密,则攻击者不只可以监视以明文传输的通讯数据,并且还可以窃取交换的数据并执行中间人攻击。 为了防止不安全的通讯,必须始终把网络层认为是不安全的,并不断确保移动程序和后端服务器之间的全部通讯都是加密的。服务器
不安全认证网络
移动设备中的输入机制,例如 4-PIN 码或者基于 TouchID 等特性的身份验证,都会致使移动应用程序的身份验证不安全且容易遭受攻击。 除非有功能需求,不然移动应用程序不须要对其进行实时身份验证的后端服务器。即便存在这样的后端服务器,用户一般也不须要在任什么时候候都处于联机状态。这给移动应用的身份验证带来了巨大的挑战,每当在本机进行身份验证时,就能够经过运行时操做或修改二进制文件来绕过已越狱设备上的身份验证。 不安全的身份验证不单单是猜出密码、默认用户账户或破坏数据。有时,能够绕过身份验证机制,系统没法识别用户并记录其(恶意)行为。 编程语言
代码篡改 编码
所谓的代码篡改指的是:在设备上下载一个应用程序后,该应用的代码和数据是存于该设备的。因为大多数应用程序是公共的,这致使攻击能够进行修改代码、操做内存内容、更改或替换系统 API 或者修改应用程序的数据和资源。 为了防止代码篡改,重要的是移动应用程序可以在运行时检测到代码已被添加或更改。开发团队应该作出相应的行动,向服务器报告代码冲突或者执行关机。 加密
魔高一尺,道高一丈。技术老是不断发展,将来仍会暴露出新的应用程序安全性漏洞,经过警戒一些编码错误,开发人员能够构建更安全的 Android 应用,避免掉入陷阱。 利用技术老是在不断发展;将来可能会基于可能暴露新的应用程序篡改点的依赖关系发现新的漏洞。经过了解这些编码错误,开发人员能够构建更安全的 Android 应用程序,并躲开可能致使这些状况的陷阱。orm