因此,我们的 Web 服务器应用程序需要连接到数据库,而其他一些应用程序具有在启动时执行的启动脚本。

就以下方面而言,存储这些应用程序的名称/密码的最佳方式是什么

  • 安全,例如也许我们不希望系统管理员知道数据库密码
  • 可维护性,例如当密码更改等时,可以轻松更改配置。

Windows 和 Linux 解决方案均受到赞赏!

有帮助吗?

解决方案

保护密码的最佳方法是停止使用密码。使用可信连接:如何:在 ASP.NET 2.0 中使用 Windows 身份验证连接到 SQL Server. 。那么你就没有什么可隐藏的了 - 向全世界发布你的 web.config 和源代码,他们仍然无法访问你的数据库。

如果这对您不起作用,请使用内置的 ASP.NET 中的配置加密系统.

其他提示

PostgreSQL 提供了 不错的解决方案 在他们的文档中针对这种情况。本质上,您使用 ssh 将计算机上的端口桥接到远程计算机上的 PostgreSQL 服务器端口。身份验证分为三个阶段:

  1. 限制对本地端口的访问,例如仅允许特定用户连接到该端口。
  2. 使用 ssh 作为特定用户设置与 PostgreSQL 主机的无密码连接。
  3. 允许用户 ssh 连接,无需密码即可本地访问 PostgreSQL。

这会降低您的用户帐户是否安全、您的 ssh 配置是否健全以及您不需要在任何地方存储密码的安全性。

编辑: :我应该补充一点,这适用于任何侦听 TCP/IP 端口的数据库。它恰好在 PostgreSQL 中被描述。并且您将需要 iptables(或 Linux 上的等效项)来进行端口限制。看 .

我同意 lomaxx 的观点:如果有人已经在服务器上或具有广泛的访问权限(例如系统管理员),那么游戏就基本结束了。因此,我们的想法是使用您信任的服务器,它的安全程度达到您想要的程度。具体来说:

  • 您需要信任系统管理员
  • 您需要信任在同一服务器上运行代码的任何其他人(这就是为什么共享托管对我来说是一个很大的禁忌)

除此之外,环境变量似乎是存储这些类型的凭据的流行选择,因为这意味着仅访问源代码(例如通过破坏开发盒)不会直接泄露它,而且它可以很好地本地化每个服务器(开发、测试等)。

纯文本?如果它们在您的服务器上,我希望服务器足够安全,不允许未经授权的访问。如果人们可以访问服务器上的配置文件,那么很早就出现了问题。

澄清:在安全性、可维护性方面(例如如果登录需要更改,我可以稍后找到它等)

@洛马克斯:也许我可能不希望每个人都可以访问物理服务器(例如sysadmins)查看密码。

谢谢!

在大多数情况下,我认为在纯文本文件中混淆密码就足够了(例如与 base64)。您无法完全保护存储的密码免受具有 root 访问权限的确定的系统管理员的攻击,因此实际上没有必要尝试。然而,简单的混淆可以防止意外地将密码泄露给肩膀冲浪者。

更复杂的替代方案是设置专用的安全密码服务器:

  • 提供密码解密服务
  • 实际上存储密码以供其他不太安全的服务器使用

根据所使用的网络协议,这可能无法防止恶意系统管理员使用 tcpdump。而且它可能也无法防范使用调试器的坚定的系统管理员。那时,可能是时候考虑一​​下 Kerberos 票证之类的东西了。

您可以将对称加密密钥烘焙到二进制文件中,并让该二进制文件在启动时从磁盘上的文件中读取加密的用户名/密码。

然而,这实际上只不过是混淆,因为您的代码可能存储在某个源存储库中的某个地方。

我建议您最好使用防火墙和专用网络气泡来控制物理上和网络上对服务器的访问,并将密码以明文(或 Base-64 编码)形式存储在磁盘上,并锁定权限给您的网络应用程序的运行用户。

您还可以锁定数据库服务器以仅接受来自您的 Web 应用程序计算机的 IP 连接。

最终,您的问题是密钥(您的数据库用户名/密码对)需要可供您的 Web 应用程序以编程方式、无人值守的方式使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top