今年 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 应用程序,并躲开可能导致这些情况的陷阱。

Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言的更多相关文章

  1. 关于怎么快速学好Android应用程序开发及其其他编程语言(大牛和高手勿喷,此篇文章也适合刚入门小师弟和小师妹)

    无论你是从.NET转过来的也好 还是从PHP转过来的等等等,能看到这篇文章的人一般都是想快速转行到Android应用程序开发,希望我的这篇文章能勉励到各位的同时,也能勉励我自己. 1.编程语言基本都会 ...

  2. 【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)

    最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们 ...

  3. Android应用程序开发之图片操作(一)——Bitmap,surfaceview,imageview,Canvas

    Android应用程序开发之图片操作(一)——Bitmap,surfaceview,imageview,Canvas   1,Bitmap对象的获取 首先说一下Bitmap,Bitmap是Androi ...

  4. Android 当打开“开发人员模式”中的“不保留活动”后,程序应当怎么保持正常执行

    Android 当打开"开发人员模式"中的"不保留活动"后,程序应当怎么保持正常执行咧. .? 在这几天,我一直在纠结这个问题.从发现,程序出现这个问题,是由于 ...

  5. Android应用程序开发之图片操作(二)——工程图片资源的加载及OOM的处理

    (一)工程图片资源的加载方法 在Android应用程序开发之图片操作(一)中,详细说明了如何操作各种资源图片,只是有的没有附上示例代码,在此,我将针对项目工程中的图片资源的显示加载进行说明.官方说明, ...

  6. 提供给Android和iOS开发人员的UWP移植向导

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:前几天微软发布了一个针对Android和iOS开发人员理解Windows Apps概念 ...

  7. Facebook再现丑闻,约100位应用程序开发人员偷看用户数据

    Facebook今天披露了另一起安全事件,承认大约100名应用程序开发人员可能不正确地访问了某些Facebook组中的用户数据,包括他们的姓名和个人资料图片. 在周二发布的博客文章中,Facebook ...

  8. 【Android 应用程序开发】 Fragment 详细说明

    笔者 : 汉书亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38064191 本博客代码地址 : -- 单一 Fragmen ...

  9. Android应用程序开发疑问

    为什么android.util.log会提供五种不同级别的打印输出方式?(打印输出在Logcat窗口)比如:Log.v()用于打印比较琐碎的信息:Log.d()用于打印调试信息:Log.i()用于打印 ...

随机推荐

  1. day48天jQuary

    今日内容 jQuery jQuery引入 下载链接:[jQuery官网](https://jquery.com/),首先需要下载这个jQuery的文件,然后在HTML文件中引入这个文件,就可以使用这个 ...

  2. Session.run() & Tensor.eval()

    如果有一个Tensor t,在使用t.eval()时,等价于: tf.get_defaut_session().run(t) t = tf.constant(42.0) sess = tf.Sessi ...

  3. Java核心技术第八章-泛型

    摘要 本文根据<Java核心技术 卷一>一书的第八章总结而成,部分文章摘抄书内,作为个人笔记. 文章不会过于深入,望读者参考便好. 为什么要使用泛型程序设计 泛型程序设计(Generic ...

  4. Maven搭建SpringMvc

    Maven搭建SpringMvc,只需跟着一步步操作 项目结构 1 创建Maven项目 index,jsp报错不用管,配置完pom就好了,也可以直接删除掉 2 pom.xml添加依赖 <depe ...

  5. 【JavaEE】之MyBatis逆向工程的使用

    MyBatis逆向工程可以方便的从数据库中将表自动映射到JAVA POJO类,并同时生成Mapper.xml和Mapper接口,方便实用.下面介绍一下逆向工程的使用方法. 使用逆向工程,我们最好是新建 ...

  6. Linux发展历史(简略)

    LINUX UNIX历史发展 1969肯 汤姆森在DEC PDP-7机器上开发出了UNIX系统 1971肯 汤姆森的同事丹尼斯 里奇发明了C语言 1973UNIX系统绝大部分用C语言重写,为提高UNI ...

  7. 爬虫新宠requests_html 带你甄别2019虚假大学 #华为云·寻找黑马程序员#

    python模块学习建议 学习python模块,给大家个我自己不专业的建议: 养成习惯,遇到一个模块,先去github上看看开发者们关于它的说明,而不是直接百度看别人写了什么东西.也许后者可以让你很快 ...

  8. iOS 基本控件的使用以及系统层次架构(1)

    User  Interface iOS系统架构层次图 -CocoaTouch UI相关 -媒体层(Media) 音频.视频.图形.动画 -核心服务层(Core services) 内存.网络.文件.线 ...

  9. border-radius:50%和100%的区别

    border-radius 值类型-百分比 border-radius的值是百分比的话,就相当于盒子的宽度和高度的百分比. 我们知道在一个正方形内做一个面积最大的圆形,这个圆的半径就为正方形边长的一半 ...

  10. zuul+security跨域Cors问题解决

    zuul+security跨域Cors问题解决 简介 场景 在服务后台都会出现跨域cors问题,不过一般spring解决起来比较方便,在框架+框架的基础上,问题就显得特别明显了,各种冲突,不了解源码的 ...