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

Lic*_*itz 3 postgresql android json soap

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

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

任何指针将不胜感激.

Cra*_*ger 9

快速版:

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

相关问题:

实施方案

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

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

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

  • XML-RPC如果你喜欢疼痛

还有一些JAX-RS 快速入门的JBoss AS 7个快速入门清单; 只需搜索"JAX-RS"." 厨房水槽 "快速入门很有用,但如果你不熟悉JBoss AS 7和Jave EE 6的基础知识可能并不理想.想要JAX-RS细节你最好使用像这样的Jersey或RESTEasy教程或者这个.

重要考虑因素

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

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

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

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