17

我的团队目前正在开发的应用程序有一个用于执行所有数据库访问的 DLL。应用程序无法使用受信任的连接,因为数据库位于防火墙后面,而域服务器不在。所以看起来连接字符串需要有一个数据库用户名和密码。DLL 当前具有硬编码的数据库连接字符串,但我不想在我们启动时这样做,因为程序集可以被反汇编,并且用户名和密码就在那里。

其中一项要求是密码需要每隔几个月更改一次,因此我们需要将其推广到我们的内部用户群。

有没有一种方法可以存储加密的密码,以便我们可以轻松地将其分发给整个用户群,而无需将其存储在程序集中?

更新:感谢所有回答的人。我将尝试回答一些问题... ASP.NET WebForms 和 VB.NET WinForms 都使用数据 DLL。我知道应用程序可以有自己的配置文件,但我没有看到任何关于 DLL 的配置文件的内容。不幸的是,我在工作中无法到达 Jon Galloway 的职位,所以我无法判断这是否可行。从开发的角度来看,我们不想在内部使用 Web 服务,但可能会在明年某个时候将它们提供给第三方。我认为模拟不会起作用,因为我们无法通过防火墙对用户进行身份验证。由于用户(或以前的用户)可能成为攻击者,因此我们对所有人保密!

4

8 回答 8

10

我不确定,但我相信您可以将其放在配置文件中并加密配置文件。

更新:请参阅 Jon Galloway 的帖子

于 2008-08-08T16:38:34.513 回答
3

假设坏人将从您的配置文件中获取凭据。这意味着他们将能够登录到您的数据库并执行该用户能够执行的任何操作。所以只要确保用户不能做任何坏事,比如直接访问表。使该用户只能执行某些存储过程,您将处于更好的状态。这是 sprocs 大放异彩的地方。

于 2008-08-25T05:12:51.047 回答
1

我不想这么说,但是一旦您将某些内容放在客户端计算机上,该数据的安全性就会消失。

如果您的程序要解密该字符串,您需要假设攻击者也可以这样做。将调试器附加到您的程序将是一种方法。

将连接字符串存储在服务器上并通过 Web 连接获取它听起来不错,直到您意识到该 Web 连接也需要安全性,否则攻击者也可以冒充您的程序并与 Web 连接对话。

让我问一个问题。你在向谁隐藏连接字符串?用户还是攻击者?如果是用户,为什么?

于 2008-08-08T17:12:58.750 回答
0

如果应用程序是 ASP.NET 应用程序,那么只需加密web.config.

如果应用程序是在多台机器上运行的客户端应用程序,则不要在本地存储连接字符串,而是考虑使用 Web 服务或其他某种安全机制来集中存储它。这将有助于将来更轻松地更新,并且您不会在本地存储连接字符串。

只是一些想法。

更新 @lassevk

“将连接字符串存储在服务器上,并通过 Web 连接获取它听起来不错,直到您意识到该 Web 连接也需要安全性,否则攻击者也可以冒充您的程序并与 Web 连接对话。 "

Web 服务的安全性是隐含的。根据部署的类型,有许多选项......例如客户端证书。

于 2008-08-08T16:44:30.180 回答
0

还有一些其他的想法。您始终可以使用模拟。此外,您还可以使用 Enterprise Library 的(Common Library)。

<section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<enterpriseLibrary.ConfigurationSource selectedSource="Common">
<sources>
  <add name="Common" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    filePath="Config\Exception.config" />
</sources>

于 2008-08-08T17:28:06.130 回答
0

.NET 支持对这样的配置值进行加密。您可以将其保留在配置文件中,但已加密。

于 2008-08-08T17:30:27.623 回答
0

您希望能够分发 DLL,所有设置信息都位于可配置的位置,但事实是,除非您执行自定义操作,否则您无法拥有一个方便的 .NET DLL 配置文件。

也许您需要重新考虑您的 DLL 应该承担什么责任。要求库的用户传入连接字符串是否可能或有意义?您的 DLL 读取配置文件真的有意义吗?

于 2008-08-08T17:40:28.227 回答
0

几个选项:

  1. 存储在 web.config 中并加密
  2. 存储在 dll 中并进行混淆处理(dotfuscator)
  3. 在 web.config 中存储一个(当然是加密的)并在数据库中休息(如果你必须使用多个并且加密/解密变得很痛苦)
于 2009-04-14T14:20:44.570 回答