什么是(大多数?)安全的方式来处理Web应用程序中的数据库连接?

时间:2010-01-07 07:40:54

标签: security postgresql

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

访问PostgreSQL数据库时,我需要提供用户名和密码。为了让密码可用于系统的无人值守启动,我需要将密码嵌入我的应用程序或配置文件中,或者作为Apache中配置的环境变量。

在任何一种情况下,我都必须在某处以明文格式提供密码。

如何在真实的网站上完成?

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

  • 确保密码位于Web服务器永远不会提供的位置。如果可能的话,把它放在webroot之外;如果那是不可能的,
  • 确保包含密码的文件只能由Web服务器运行的用户读取,并且不能被任何人写入
  • 定期旋转,以减少影响,如果它以某种方式泄漏
  • 确保您使用的数据库用户具有最低权限。例如,对于Wordpress安装,创建一个仅供Wordpress使用的帐户,并使其只能访问其实际需要的数据库。
  • 将数据库配置为仅接受来自Web服务器的连接,以防止攻击者能够从网络上的任何旧随机节点使用该密码,从而最大限度地减少泄漏的影响

答案 2 :(得分:3)

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

当然,您可以尝试以某种方式加密和混淆密码。但是,通过默默无闻的这种安全性对于那些设法进入Web服务器的人来说并不是一个障碍,特别是当所有Perl源代码都可供阅读时。

答案 3 :(得分:1)

您可以将密码存储在〜/ .pgpass中(当然,对于Web服务器用户)。这在共享主机中显然不安全,其中同一用户用于许多不同的网站,但如果您有专门的设置,它通常可以很好地工作。请参阅http://www.postgresql.org/docs/current/static/libpq-pgpass.html

重要的是将它存储在一般网络树之外。

答案 4 :(得分:0)

在PostgreSQL Server上使用防火墙 IP:端口过滤器,并限制只能访问您的网络服务器的IP。