Android App数据安全测试
简介
Android App
本地数据存储是使用SQLite
数据库,SQLite 是遵守ACID
的关系数据库管理系统,它包含在一个相对小的C
程序库中。与许多其它数据库管理系统不同,SQLite
不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。
如果你是应用程序开发人员,你可能还会注意到 SQLite
查询看起来或多或少像 SQL
一样。 在 Android
中选择 SQLite
的原因是其内存占用较低,也不需要设置或配置数据库,并且可以在应用程序中直接调用。
获取SQLite文件
Android
SQLite
数据库默认在 Android
中存储在/data/data/[package name]/databases/
位置,扩展名为.db
文件,注意Android
设备需要root
。
进入设备的
/data/data
目录,查找对应的测试包。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26C:\Users\Shuqing
λ adb shell
HWVOG:/ # cd /data/data
HWVOG:/data/data # ls
android com.android.egg com.android.providers.telephony
android.ext.services com.android.externalstorage com.android.providers.userdictionary
android.ext.shared com.android.gallery3d com.android.provision
cn.goapk.market com.android.htmlviewer com.android.proxyhandler
com.amaze.filemanager com.android.inputdevices com.android.server.telecom
com.android.backupconfirm com.android.inputservice com.android.settings
com.android.bluetooth com.android.keychain com.android.sharedstoragebackup
com.android.bluetoothmidiservice com.android.location.fused com.android.shell
com.android.bookmarkprovider com.android.managedprovisioning com.android.statementservice
com.android.browser com.android.mms.service com.android.storagemanager
com.android.calllogbackup com.android.mtp com.android.systemui
com.android.camera2 com.android.onetimeinitializer com.android.vpndialogs
com.android.captiveportallogin com.android.packageinstaller com.android.wallpaperbackup
com.android.carrierconfig com.android.phone com.android.wallpapercropper
com.android.certinstaller com.android.printservice.recommendation com.bignox.app.store.hd
com.android.contacts com.android.providers.blockednumber com.bignox.google.installer
com.android.cts.ctsshim com.android.providers.calendar com.example.android.softkeyboard
com.android.cts.priv.ctsshim com.android.providers.contacts com.google.android.webview
com.android.defcontainer com.android.providers.downloads com.tal.kaoyan
com.android.documentsui com.android.providers.media com.vphone.helper
com.android.dreams.basic com.android.providers.settings com.vphone.launcher
HWVOG:/data/data #这里我们获取包
com.tal.kaoyan
的db
文件。进入包文件databases
目录内部可以看到如下db
文件。
1 | HWVOG:/data/data # cd com.tal.kaoyan |
- 退出
adb shell
我们将future_db.db
拷贝出来放到本地电脑。
1 | C:\Users\Shuqing |
查看SQLite文件
导出db
文件后我们可以使用 DB Browser for SQLite
来查看数据内容。
下载地址:https://sqlitebrowser.org/dl/ 根据自己的系统版本来选择安装即可。
- 启动应用,然后依次点击菜单:文件->打开数据库选择我们导出的
future_db.db
即可查看数据库表结构和内容。
- 点击
浏览数据
菜单可以查看表具体数据内容。
- 点击
执行SQL
菜单可以输入SQL命令来进行数据的增删改查。
SQLite数据安全
SQL注入
如果通过应用获取用户输入的数据并将其插入 SQLite
数据库,那么就有可能发生 SQL
注入攻击的安全问题。
SQL
注入,就是通过把SQL
命令插入到 表单提交或输入域名的查询字符串,最终达到欺骗服务器执行恶意的SQL
命令
比如有一个表单,用户可以输入 name
1 | <?php |
那么当用户输入的name
为 Python'; DELETE FROM user;
时会变成什么?
1 | SELECT * FROM users WHERE name='Python'; DELETE FROM user;''; |
这条语句运行一下,会发现什么? 我们的 user
表被清空。
预防SQL注入
防止SQL
注入,我们需要注意以下几个要点:
- 永远不要信任用户的输入。
- 对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双引号 进行转换等。
- 永远不要使用动态拼装
SQL
,可以使用SQL
预处理语句。 - 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
- 不要把机密信息直接存放,加密或者
hash
掉密码和敏感的信息。 - 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。