如何安全(间接)查询android中的postgresql数据库?

时间:2012-06-04 12:45:19

标签: android json postgresql soap

我必须采用的当前解决方案使用JDBC并在android应用程序中存储数据库的用户/密码。就我而言,这并不是一个好的解决方案。我想在中间的Web服务器上实现一个映射层。

对此有最佳做法或推荐策略吗?我应该使用SOAP或JSON还是完全不同的东西(因为它们在Java中实现得很好和/或易于使用)? 是否有任何postgresql映射工具< - > SOAP / JSON / PHP中的任何东西,还是我需要自己编写这些脚本?

任何指针都将非常感激。

2 个答案:

答案 0 :(得分:9)

快速版:

使用在您控制的公共主机上运行的Web服务中间层(可能但不一定是数据库主机)。公开Web服务方法来执行您想要允许的有限工作,而不是其他任何内容。

相关问题:

实施选项

我个人使用像Apache TomcatJBoss AS 7之类的Java应用服务器,然后使用JAX-RS编写我的Web服务方法,为我的应用程序生成一个很好的REST风格的API使用。这就是我熟悉的,它运作良好,但你有很多选择,包括:

的实现
  • 类似REST的API(Java的JAX-RS推动Jersey和RESTEasy,各种其他langs工具)使用HTTP请求并生成JSON或XML回复。

  • 使用WSDL的SOAP,经典的“Web服务”层。在Java中完成JAX-WS和其他选项。大多数语言都有SOAP + WSDL工具,但是对于像手机这样的间歇性连接设备来说尤其如此。

  • 如果你喜欢痛苦的XML-RPC

quickstarts列表中有一些JAX-RS JBoss AS 7 quickstarts;只需搜索“JAX-RS”。 “kitchen sink”快速入门非常有用,但如果您不熟悉JBoss AS 7和Jave EE 6的基础知识可能并不理想。如果您使用Jersey或RESTEasy,最好使用JAX-RS细节。像thisthis这样的教程。

重要注意事项

如果可能,请使用HTTP,如果访问不是公共的,请使用合适的HTTP身份验证方案,如HTTP Basic上的HTTP Basic身份验证。任何体面的Web服务实现都将提供身份验证选项或支持运行它的平台的身份验证选项。避免在Web服务层实施自己的身份验证和用户管理的诱惑,搞砸了;在已经编写和测试的HTTP层使用auth。这可能需要使用Apache的mod_auth_pgsql,JBoss AS 7的JDBC安全领域等等。我认为唯一不适用于每用户HTTP身份验证的情况是我不需要将用户分开出于安全原因,我只关心它是我的应用程序访问服务器,即如果我的安全要求非常弱。在这种情况下,我会为整个应用程序使用固定的用户名/密码,如果Android支持,我可能会使用X.509客户端证书。

请记住,无论您如何保护安全,所有凭据都是用户已知的,或者可以从.apk中轻松提取,因此您仍然必须假设任何人都可以访问您的Web服务方法,而不仅仅是您的应用。相应地写下来。

只是通过对服务器的Web服务调用从您的应用程序发送SQL并将结果作为JSON返回。这是非常不安全的,也是丑陋和笨重的。为希望应用程序能够执行的每个单独任务编写Web服务方法,并将SQL保留在服务器中。请记住使用参数化查询并注意其他SQL注入风险。这些Web服务方法可以使用一个或多个查询来生成单个回复 - 例如,您可能会收集“客户”记录,并且所有关联的“地址”和“联系”记录然后将结果返回到一个漂亮的JSON对象Android设备可以消耗,节省许多缓慢和不可靠的网络往返。

无论您使用什么,请确保在后台工作线程中进行Web服务调用,而不是阻止用户界面。准备好超时和错误,以及重试的必要性。通过模拟间歇性连接丢失,高延迟和高丢包率来测试您的应用,并确保它仍然可用。

答案 1 :(得分:1)

是否有最佳做法:

这取决于人。所有人都有自己的力量和弱点。 我更喜欢,我认为很多但不是所有人都同意JSON,因为它在Android中非常容易使用。它也很轻巧,非常容易在PHP中使用。 Php有将数组/对象转换为json并返回的方法。

确实不建议将您的postgres数据保存在Android设备上。

我的策略通常是:

PHP服务器端带有POSTGRESQL数据库,使用PDO在我的模型和数据库之间进行通信。

如果你不熟悉PDO(php数据对象),我建议你自己熟悉它。

php.net PDO

Android作为客户端,使用JSON作为从中传输数据的方法。

有很多例子可以帮到你。

Android有标准库来处理json解析。

请参阅此答案以获取示例:

example