2010-03-26 39 views
3

我一直在使用MySQL编写Web应用程序,时间很长。我总是将我的数据库连接信息存储到配置变量中,并以此方式连接到数据库。如何使用java小程序安全地与数据库进行通信

客户想要一个Java小程序为他们的网站与他们的数据库进行通信。我对此犹豫不决,因为applet将会公开,我不知道如何去存储数据库连接信息。

我很偏执,有人会反编译我的应用程序或找到某种方式来提取我的数据库连接信息并恶意使用它。

有关如何安全地执行此操作的任何建议?

回答

5

只是为了澄清一下,你并不太担心连接被“偷听”,你担心有人可能会破解你的applet并提取数据库连接的细节,对吧?

那么我可能不会让它直接连接,而是让它与一个以JSON/XML返回数据的Web应用程序进行通信。如果他们真的想要的话,人们仍然可以从applet中抓取它,但它们仅限于Web应用程序的功能。

如果这不会让你的船浮起来,请确保applet使用的数据库用户仅限于做它所需要的。如果只是拉取数据,不要给它插入权限。

如果你只是在做写操作,另一个选择是有一个公共数据库和一个私人数据库。从你的小程序写入到公共数据库中,并在验证后进行同步。这样做的问题是,除非您保留公共数据库中的所有数据的副本,否则可能会丢失一些内置的检查和关系 - 这可能不安全。

另一种选择可能是为每个用户分配自己的数据库用户。然后,如果有人未经授权得到小程序,他们仍然需要一个帐户才能进入。

我认为构建一个中介网络应用程序可能是您最好的选择,但我不知道完整的场景,所以我不是最好的判断。

+0

什么AMFPHP确实为闪存正确相似? 因为我还没有找到关于这一特定问题 – WarmWaffles 2010-03-26 08:35:20

+0

当然#2问题我也问这个的一般情况。 AMFPhp稍微比你需要的密集程度更高,因为它将数据串入到动作脚本语法分析中......你有更多Java选择,你可以分析你喜欢的任何东西。 JSON是有道理的IMO,因为它既轻量级,PHP也可以轻松地串行化为JSON,并且有很多免费的Java库。 – Oli 2010-03-26 12:20:57

1

我会建议有一个applet与网站进行通信。其本身与数据库进行通信。

1

这是一个trusted client问题,没有深入研究关于标准JDBC连接证书之上的身份验证扩展的JDBC,我建议您通过自己的数据库层包装所有请求。

我实际上已经实现了一个使用Ajax的JDBC包装器,其中客户端将JS内部的SQL语句直接发布到一个将这些语言转换为DB请求的Servlet,我实现了更新和查询,并且整个实现少于300行Java Servlet代码和60行JS代码。

该解决方案不包括任何身份验证,但很容易添加到HTTP层之上。无论如何,你有一个值得信赖的客户端问题,它不能解决被黑客户端可以在任何预定义或指定的用例之外访问整个数据库模式的问题,G:

select * FROM records

相反后端请求的:

SELECT id, data, val, ... FROM records WHERE userid = ...

其中仅选择先前由认证的用户创建的记录。确保安全性的唯一方法是只通过预定义的数据检索/修改方法访问数据库。否则,安全性和数据隔离必须由数据库本身强制执行,请阅读“贵大O数据库” :)

我的400线JS/Java示例以上是在测试系统中只有房子的使用用途。

相关问题