什么是处理Web应用程序中数据库连接的(最)安全方法?

3

我有一个使用PostgreSQL编写的Perl Web应用程序。

当访问PostgreSQL数据库时,需要提供用户名和密码。为了使系统能够无人值守地启动,我需要将密码嵌入到应用程序中、配置文件中或在Apache中配置为环境变量。

无论哪种情况,我都必须在某个地方以明文格式存储密码。

真实的Web网站是如何处理这个问题的呢?


3
如果有人能够在您的服务器上读取您的密码,那么您已经输掉了。 - Alexandr Ciornii
1
Alexandr:抱歉,但您完全错了;那是一种非常幼稚的安全方法。 - Noon Silk
5个回答

6
最安全的做法是使用配置文件,并将其放在公共文件夹之外。

4
  • 确保密码不会被 Web 服务器提供。如果可能的话,请将其放在 Web 根目录之外; 如果不可能,则
  • 确保包含密码的文件仅由 Web 服务器运行的用户可读,任何人都无法写入。
  • 定期更换密码,以最小化泄漏的影响。
  • 确保您使用的数据库用户具有最少的权限。例如,对于 WordPress 安装,创建一个专门为 WordPress 使用的帐户,并只为其提供实际需要的数据库访问权限。
  • 配置数据库仅接受来自 Web 服务器的连接,以最小化泄漏的影响,防止攻击者能够从网络上的任意节点使用该密码。

2
+1,好的列表,但是你忘记了一个:配置数据库只接受来自Web服务器的连接,以最小化泄露的影响,防止攻击者能够从网络上的任何随意节点使用该密码。 - Dave Sherohman
是的,这似乎太明显了,不值得一提 - 但在某些方面,其他所有内容也是如此。我已将我的帖子设置为社区维基,并添加了您的建议 :) - James Polley

3
您可以在PostgreSQL的pg_hba.conf中信任您的Web服务器IP(或本地主机,如果是同一节点),并且完全不使用密码。至少我认为这比在Web服务器的文件系统中存储数据库密码不安全。

当然,您可以尝试对密码进行加密和混淆。但这种安全性通过模糊化并不是真正的障碍,特别是当所有Perl源代码都可以被读取时,对于已经成功进入您的Web服务器的人来说。


1

你可以将密码存储在 ~/.pgpass 文件中(当然是为了网站服务器用户)。在共享主机上,同一用户用于许多不同的网站,这显然不安全。但如果你有一个专用的设置,它通常非常有效。请参见 http://www.postgresql.org/docs/current/static/libpq-pgpass.html

重要的是将其存储在通用 Web 树之外。


0

在 PostgreSQL 服务器上使用防火墙IP:端口过滤器,并将访问限制为仅限于您的 Web 服务器的 IP。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接