使用 Kotlin 需要注意的编码错误
今年 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 应用程序,并躲开可能导致这些情况的陷阱。
参考:sdtimes
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
面向声明式 API 编程(DAP)的框架,Mars-java 3.0.2 发布
本次更新如下 API跟Service彻底解耦,API的参数列表和Service参数列表完全可以不一致,不管是类型还是数量,框架会自动把API的参数值给到Service的参数中对应的字段 代码结构上做了调整,使源码更规范,便于阅读与维护 为了配合声明式API的出现,发布了Mars-cloud 3.0.2 API与Service怎么解耦的 Service中的方法,代码示例 public List<DemoEntity> selectList(InsertEntity insertEntity, Map<String,Object> param) { return null; } API声明,代码示例 @MarsReference(beanName = "bean的name",refName = "selectList") Object selectList(DemoEntity demoEntity); 前端直接请求 这个api即可,传来的参数会被自动赋值给demoEntity里的字段,框架会自动把demoEntity里的数据赋值给Service的参...
- 下一篇
重新认识 D语言 —— DLang 基础篇
编程语言的兴盛往往随着全球信息技术产业方向而变化,同样也会因为跟不上节奏而没落。 D 语言曾经兴盛过,也随着信息技术发展而颓废过,但最终我们很高兴的看到它又带着强烈的自信开始复苏,希望通过本文让现代计算机科学工作者进一步了解这门具有独特魅力的编程语言。 作者:邹佳庆、张雪平 引言 D 语言是一门语法相当优雅的编译型语言,自 1999 年发布至今已发展了 20 年,它既拥有 Java 那样强大的表现力,又具有 C++ 相当的性能,本来是一门未来相当明朗的语言,但是当年因为 2.x 版本破坏性升级导致社区大量核心开发者将其放弃。 2010 年,伴随着 Andrei Alexandrescu 新书《The D Programming Language》的出版,D 语言又变得活跃起来,D 语言 2.0 的特性变得稳定,运行库与标准库的分离,解决了 D 语言 1.0 时期标准库之争的问题。 2011 年,D 语言的开发迁移到了 Github,在有了更好的代码管理和 bug 跟踪方式之后,参与到 D 语言编译器、运行库和标准库开发的人员也有了明显的增加。次年,D 语言 1.0 版本停止更新,开发者...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8