如何验证应用程序是它所说的应用程序?

时间:2009-08-14 11:25:16

标签: security database-connection common-library

以下是这种情况:我们有一个公共库,可以从我们设置的中央配置存储中检索数据库连接详细信息。使用数据库时,每个应用程序都使用此库。

基本上,它会调用存储过程并说“我是{xyz}应用程序,我需要连接o”,它将返回该应用程序主数据库(服务器,实例,数据库,用户和密码)的连接详细信息)。

如何将其锁定,以便只有应用程序{xyz}可以检索{xyz}数据库的密码(每个应用程序都有一个数据库详细信息列表......我只需要保护密码)?

5 个答案:

答案 0 :(得分:3)

通常的方法是为每个应用程序设置不同的配置存储,并为每个应用程序提供不同的用户/密码以连接到配置存储。

这并不妨碍任何人更改应用程序并使用应用程序Y中的值替换app X的用户/密码,但它更安全一些,尤其是当您编译此数据而不是通过配置文件提供它时

如果您想要非常安全,首先必须创建与商店的安全连接(因此您需要一个支持此功能的数据库驱动程序)。必须使用每个应用程序唯一且可以验证的安全密钥创建此连接(因此没有人可以只复制它们)。您将需要使用哈希来保护可执行文件(应用程序将以某种方式计算自己的哈希值并将其发送给将为每个应用程序提供有效哈希列表的服务器。)

总而言之,你可以用一个不起眼的选项打开它并不是一件小事。首先,您需要学习很多关于安全性和安全数据交换的知识。您需要一种方法在不安全的地方安全地安装您的应用程序,验证其完整性,保护代码免受可在运行时附加的调试程序以及在虚拟机中运行的调试程序等的影响。

答案 1 :(得分:1)

离开我的头顶,试试PKI。

答案 2 :(得分:1)

您是否试图保护自己免受恶意程序的攻击,这是一个这些应用程序连接的中央数据库吗?如果是这样,您应该考虑数据库和应用程序之间的中间层。

我不确定这适用于您的情况,具体取决于您对上述问题的答案如何,但通过评论,您听起来就像这个问题的情况类似。

Securing your Data Layer in a C# Application

答案 3 :(得分:0)

一种可能性是以加密形式将密码保存在数据库中,并将加密密钥传递给安全连接中允许的应用程序。然后,只有具有加密密钥的应用程序才能真正获取密码和不是其他人。

答案 4 :(得分:0)

最简单/最直接的方法是以加密格式存储密码(无论如何,以明文方式存储密码都是非常糟糕的,如最近在PerlMonks上所证明的那样)并使每个应用程序负责进行自己的密码加密/解密。然后,应用程序是否检索到另一个应用程序的密码并不重要,因为它仍然无法解密它们。