掌握安卓安全规则的基本知识
安全是安卓应用的一个基本因素。维护Android应用程序的安全可以确保用户数据的保密性。
本文将探讨如何确保一个Android应用程序的数据安全。此外,我们还将看到如何在与其他用户共享数据时保护其安全。
安卓安全规则的原因
以下是确保安卓应用安全的几个原因。
- 为了维护用户在使用该应用程序时的信任。
- 为了维护设备的完整性。
- 保持用户的数据机密。
前提条件
要完成本教程,读者应该具备以下条件。
- 安装并运行Android Studio。
- 对使用Kotlin构建Android项目的基本了解。
如何确保Android应用程序的安全
确保安全的各种方法包括。
1.询问用户的凭证
询问凭证是确保应用程序安全的最基本方法。密码、个人识别号码(PIN)、图案以及生物识别技术(如指纹和面部识别)都是用户凭证的例子。作为开发者,你可以在程序中实现这些约束,以帮助用户保护应用程序中的数据。
2.保护应用程序的通信安全
这个过程需要保护你与其他应用程序共享的信息。在与另一个应用程序分享你的应用程序的数据时,你应该确保你的数据是安全的,并且这个过程是安全的。
也有一些情况下,应用程序可以与网站共享数据。同样,这应该以安全的方式进行,以防止安全漏洞。
在执行安全通信时,我们暗示了隐含意图的概念,这涉及到你的应用程序与其他应用程序的通信。这个场景将展示如何使用隐式意图和非导出内容提供者来执行安全,同时与其他应用程序或网站共享应用程序的数据。
在隐式意图中,当意图可以在用户的设备上启动两个以上的应用程序时,显示一个应用程序选择器是好的。这样做将允许用户只将敏感信息传输给他们完全信任的应用程序。
应用选择器可以按以下方式实现。
intentButton.setOnClickListener {
val intentChoose = Intent(Intent.ACTION_SEND)
val availableActivities: List<ResolveInfo> = packageManager.queryIntentActivities(intentChoose, PackageManager.MATCH_ALL)
// Verify that the user has at least two apps that can handle the intent
if (availableActivities.size > 1) {
//Intent to show app chooser, title can be any string
val title = resources.getString(R.string.select_title).let { title ->
Intent.createChooser(intentChoose, title)
}
startActivity(title)
} else if (intentChoose.resolveActivity(packageManager) != null) {
startActivity(intentChoose)
}
}
上面的意图例子有一个简单的布局,有一个触发意图的按钮,选择你打算与之分享数据的应用程序。
3.限制内容提供者的数据访问
内容提供者是一个提供结构化访问被Android应用程序管理的数据的类。必须在清单的<provider> 元素中定义各种内容提供者。
如果你打算开发一个运行在Android 4.1.1(API级别16)及以下的应用程序,你应该在清单中把 ContentProvider权限为false,以禁止其他应用程序访问你的应用程序中的数据。
因为'provider>'有一个'android:exported'属性,将该元素设置为 "true "可确保您的应用所管理的数据是安全的。
在Android 4.1.1版本上,该元素默认始终为 "true",而在运行Android API级别17及以上的设备上则为false。当它被设置为true ,该提供者对其他应用程序可用,而当它被设置为false ,该提供者对其他设备不可用。
权限总是在清单中设置。例如,在AndroidManifest.xml中添加以下权限,拒绝其他应用程序访问ContentProvider 。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ramgdeveloper.androidsecurityrules">
// Permission to disallow ContentProvider
<application
<provider
android:authorities="com.developer.androidsecurityrules.fileprovider"
android:name="androidx.core.content.FileProvider"
android:exported="false">
// You can add other elements here.
</provider>
</application>
</manifest>
<provider>属性有以下元素。
-
<android:authorities>- 是一个或多个URI授权的列表,对内容提供商提供的数据给予认同。权限名称应使用Java风格的命名惯例以避免冲突,例如: 。由于没有默认值,必须至少指定一个授权。com.example.provider.myaplication -
<android:name>- 是你打算禁止的内容提供者的名称。例如,在这个例子中,它是<FileProvider>它是<ContentProvider>的一个子类,确保与应用程序相关的数据的安全共享。 -
<android:exported>- 它的值可以是true或false,以显示该提供者是否可用。
虽然 <provider>有多种元素,但在本文中我们只考虑以上三种。
4.使用最新的服务和依赖关系
在android开发中,服务是一个可以在后台执行长期运行的操作的应用组件。
服务的类型包括。
- 前台服务 - 这是一个执行一些用户可以注意到的操作的服务,例如,一个音频应用程序播放音频。
后台服务。一个执行用户不能直接注意到的操作的服务。
例如,如果你的应用程序使用Google Play服务,你应该确保它在你的设备上被更新。
接下来是依赖性。依赖项是Android项目中包含的外部库或本地JavaArchive(jar)文件。例如,当使用Google Firebase来验证用户时,你要在**build.gradle(Module App)**中添加一个用于验证的firebase依赖项作为。
implementation 'com.google.firebase:firebase-auth:21.0.1'
例如,使用上面的Firebase auth依赖关系是合适的,可以使用更新的版本。依赖关系还包括像软件开发工具包(SDK)这样的库,可以使用SDK管理器从Android Studio直接更新。
注意:依赖关系是在Android studio中的
build.gradle。因为有些依赖项已经过时或不再被支持,请确保你检查你的应用程序所需的库的网站,以获得最新的版本。
一些依赖项已经被淘汰或不再被支持。使用它们会导致你的应用程序不安全。
5.在连接到互联网时应用相关的网络安全措施
网络安全措施是添加到网络中的工具,以确保存储或传输数据的安全。为了保证你的应用程序的数据安全,作为一个开发者,如果应用程序要在网络中共享数据,你应该包括以下安全措施。
使用安全套接字层流量
SSL是安全套接字层的缩写,是确保互联网安全连接的标准技术。它还能保护通过互联网共享的任何敏感数据。
如果你设计的应用程序与拥有受信任的证书机构颁发的证书的网络服务器进行通信,那么发送HTTPS请求将是非常直接的。
HTTPS请求向远程或网络服务器发送POST或GET请求。你必须确保你是通过安全通道进行的。例如,你想发送一个GET请求,以确保它的安全,如下面的代码片段。
// Function for sending a secure GET request
fun getRequest() {
// GET request URL
val requestUrl = URL("https://www.section.io/")
/* Sending secure GET request
* Opening the connection via HttpURLConnection
*/
with(requestUrl.openConnection() as HttpURLConnection) {
requestMethod = "GET"
println("\nSent 'GET' request to URL : $requestUrl; Response Code : $responseCode")
inputStream.bufferedReader().use { response ->
response.lines().forEach { message ->
println(message)
}
}
}
}
注意:要使GET请求成功,你需要在清单中允许互联网权限。
<uses-permission android:name="android.permission.INTERNET"/>
总结
安卓应用的安全包括跨网络共享的数据的安全和存储在安卓设备上的数据的安全。这篇文章只涵盖了最基本和最常用的安全方法。