我在网上发现了一些教程,解释了如何从Android应用程序连接到MySQL,但它们有点浮出水面。
如果我只是编写SQL并在POST中发送/接收它,出于以下几个原因它似乎有问题:
1)硬编码SQL有明显的问题 2)发送sql的安全问题 - 发送该请求是否安全?还是应该只通过SSL来完成? 3)要连接到数据库,为了插入内容,我需要在应用程序内部使用数据库连接信息 - 这样安全吗?是否可以通过黑客入侵设备和应用程序来阅读代码?
从Android应用程序连接和使用远程数据库的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
使用通过其与数据库通信的Web服务。最终用户客户端通常不通过Internet与数据库通信。 Multitier_architecture
答案 1 :(得分:1)
将所有内容包装在API中,并通过使用公钥/私钥加密或使用基于令牌的系统来管理身份验证。您永远不应该永远以任何方式,形状或形式从任何设备或站点接受原始SQL。大多数情况下,如果您需要运行实时远程数据,则应重新考虑应用程序工作流程并处理稍微陈旧的数据,或者由于可能的不稳定连接而在后台提供信息。打一个API甚至可能是一项代价高昂的工作,因此它不应该是经常发生的事情。
要结合上面的一些想法,你可以做几件事。对于在http://en.wikipedia.org/wiki/Public-key_cryptography上阅读的公钥/私钥。基本概念是将公钥存储在设备上,然后在安装也存储在设备上的应用程序之后协商私钥(尽管未编码到应用程序中)。此密钥是您必须保护的密钥,因此应在安装时协商并与应用程序的生命周期一起存储。您可以使用设备的唯一哈希值(例如设备ID)和用户可以设置的密码来联系API。这样,如果数据被擦除,由于密码存储在服务器上,您可以验证生成新密钥的请求是否对该设备ID有效,并防止攻击者试图破坏每个人的密钥。
显然,这仍然容易受到拦截初始请求的人的影响,但如果你使用的是HTTPS(你应该这样做),那么它应该可以缓解大部分问题。
您必须确保攻击者无法发送随机设备ID请求以生成新密钥,因为它会破坏该哈希的实际用户设备,这就是密码集很重要的原因。当然,他们也可以针对当前未注册的设备ID执行此操作,但您可以轻松地针对初始API实施限制和黑名单。
你可以做很多事情,但根据你的敏感数据,它可能有点过分。你必须做出判断,并找出你想要保护你的数据的人。