2011-09-26 99 views
10

我想知道在android应用程序中打包数据库的安全性。用户可以轻松访问数据库吗?由于我拥有的数据库将拥有我不想被用户滥用的数据,因此在移动应用程序中保护数据库的最佳方式是什么?Android:数据库与应用程序的安全性如何安全

另外我的应用程序会使用网络服务(联系我自己的网站),例如http:\ www.mysite.com/services/xxx

我的网站将反过来将一些数据返回到移动应用程序。如果某人反编译Java代码(在apk中),他将很容易访问我用于Web服务的URL。我如何保护网站上的数据遭到恶意用户的攻击。如果有人知道URL,他可以简单地在浏览器中输入该URL,并获取所有json格式的数据,这是我不需要的,因为这些数据可能非常敏感。即使我保留它的编码,用户也可以从java代码中知道编码(他在反编译apk后获得)。

如何让我的数据库不被误用?

如果我的应用程序是显示当地的地方,如餐馆,酒吧等移动应该我总是从网站使用Web服务获取它们或提供一个本地数据库的这些细节,以便可以快速获取信息。在这种情况下,我可以提供更新本地数据库的UPDATE Web服务器。但是本地数据库的安全性对我来说非常重要。

任何人都可以请建议在哪里保持数据库,以及如何保护它?

RGDS, 萨班

回答

8

本地数据库和您的APK文件可以通过任何设备扎根很容易被读取。 This tool甚至可以反编译你的资源,如this youtube tutorial(我从来没有尝试过我自己)。

因此,您必须将加密的数据存储在数据库中,并将其解密以形成您的应用程序代码,以确保没有人可以通过简单地从他的设备的data目录获取数据库来访问它。

你不应该把你的敏感数据(比如密码等)放在资源文件夹中,因为它可以被反编译,把它放到你的代码中。

现在给你的JSON API一些单词。隐藏URL是不够的,因为用户可以通过嗅探器很容易地跟踪你的请求,并且无论如何都可以。您应提供身份验证机制以保护未经授权的访问,并保护您的SSL通信。 (例如使用HTTP authentication--只有当你的服务器提供SSL时才有意义。)

这是你应该考虑的事情,并决定你自己对数据的实际敏感程度。

+0

您能否提供更多关于设置验证机制以保护未授权访问的信息?我对这个领域比较陌生。所以任何帮助将会非常棒.. – Sapan

+0

我也是,嘿嘿;-)当我找到一些有用的信息时,我会做一些研究并更新我的答案。 – Knickedi

+0

我添加了一个维基百科链接:-D HTTP验证可能是最常见的请求保护解决方案。 – Knickedi

2

据我了解你要:

  1. 将您的初始数据包打包APK文件(RES /资产的文件夹说)
  2. 在第一次运行时发生爆炸,从资源/资产Application Data文件夹
  3. 然后DB文件从时间从网站/ web服务

获取数据到数据库在这一情况下,有两种基本的漏洞(存储的数据我的意思):

  1. 初始DB图像,因为它的包装与APK(这是​​在现实生活中只是zip压缩包),所以任何人都可以拆开,看看什么东西装在你的数据库
  2. D B文件存储在应用程序数据文件夹中(通常为/ data/data/MY_APPLICATION_PACKAGE/databases)。此文件夹可以在根设备上访问,因此您的数据可以轻松地被屏蔽

要保护的唯一选项是加密数据库内容。最简单的方法是将实际使用某些记录之前/之前的BLOBs(以JSON的XML形式)存储在BLOB中,并对这些BLOB进行加密/解密。

我自己亲自在我的应用程序中做到了 - 它运行良好。

+0

感谢您的回答......因为我不是数据库专家,您是否可以提供一个简单的示例。请问Proguard还有助于确保apk内的数据库安全吗? – Sapan

+0

@Sapan在这里寻找引用http://stackoverflow.com/questions/6043984/sqlite-encryption-for-android关于Proguard混淆 - 它不能帮助你保护数据库,它只是混淆你的代码 – barmaley

+0

非常感谢指针..我一定会通过引用,并让你知道,如果这适合我的需要或不..sqlcipher似乎是一个很好的选择,但它的开发者发布只有截至目前...任何想法如何保护网络服务请求以避免未经身份验证的访问? – Sapan