6

我了解到您的 Web 服务器可能会出现问题,这可能会导致 PHP 脚本在 Web 浏览器中显示为纯文本文件;因此,我已将大部分 PHP 脚本移至 Web 根目录之外的目录。现在我一直想知道我的 cgi-bin 中的 CGI 脚本是否会发生同样的情况。

我主要关心的是一个脚本,其中包含我的 MySQL 数据库的用户名和密码。如果这是一个可能的安全漏洞(至少就数据库内容而言),是否有办法将敏感数据放在不同的位置并从那里获取(比如将其保存在不同目录中的文件中并读取例如,它来自该文件)?我的脚本是用 Perl 写的。

4

6 回答 6

10

我了解到您的 Web 服务器可能会出现问题,这可能会导致 PHP 脚本在 Web 浏览器中显示为纯文本文件;因此,我已将大部分 PHP 脚本移至 Web 根目录之外的目录。现在我一直想知道我的 cgi-bin 中的 CGI 脚本是否会发生同样的情况。

是的。如果出现问题导致程序被服务而不是执行,那么它们的任何内容都将被暴露。这与 PHP 的问题完全相同(除了考虑到通常配置 cgi-bin 目录的方式(即别名为 web 根目录之外的目录),问题的发生稍微困难一些)。

我主要关心的是一个脚本,其中包含我的 MySQL 数据库的用户名和密码。如果这是一个可能的安全漏洞(至少就数据库内容而言),是否有办法将敏感数据放在不同的位置并从那里获取(比如将其保存在不同目录中的文件中并读取例如,它来自该文件)?

是的。正是如此,只需确保该目录位于 webroot 之外。

为提高安全性,请确保数据库仅接受来自需要访问它的最少主机集的连接凭据。例如,如果数据库与 Web 服务器在同一台服务器上,则只让凭据对 localhost 有效。在这种情况下,使数据库仅侦听 localhost 网络接口也是一个好主意。

我的脚本是用 Perl 写的。

我会考虑为此使用Config::*模块之一。

于 2010-12-01T15:41:01.363 回答
3

值得一提的一个问题是特定于共享主机。

如果您在与其他用户共享的主机上,则可能无法向他们隐藏密码。这取决于操作系统和网络服务器的配置细节。

例如,在 Linux 上通常有一个 Apache 配置,在该配置上,用户提供网站以使文件对网络服务器用户可读或可写的唯一方法是使它们对所有用户可读/可写。

您可能相信所有这些用户不会自己滥用此功能,但如果其中一个网站存在允许入侵者查看完整文件系统的漏洞,则入侵者可以在所有其他网站上利用该漏洞。

对此有应对措施,但它们使用户的事情变得复杂,因此许多托管商没有实施它们。

于 2012-01-25T09:46:19.350 回答
2

如果可以避免的话,在脚本中硬编码密码绝对不是一个好主意。幸运的是,Postgres 和 MySQL 都支持从文件加载数据库凭据。对于 Postgres,你使用 ~/.pgpass,对于 MySQL,我相信它是 ~/.my.cnf。在任何一种情况下,您都将调整权限,以便只有运行脚本的用户才有读取文件的权限。这种方法的优点是您不必编写代码来读取文件 - DB 客户端库会自动执行此操作。

于 2010-12-02T09:06:16.843 回答
1

这绝对是一个安全问题。您应该将加密的密码存储在单独的文件中,并确保只有您的应用可以访问它。

于 2010-12-01T15:40:57.830 回答
0

如果您使用配置为 cgi-bin 的目录,则无法显示文件,除非 Apache 配置出错。如果您在 cgi-bin 目录之外但在站点根目录内使用 Perl 程序,则可能会发生这种情况。

此外,您可以将 DB 配置为仅接受来自本地套接字的连接,因此知道 DB 密码将毫无用处。

于 2010-12-01T20:12:04.990 回答
0

您已经得到了比我能提供的更好的答案,但请注意:

将密码存储为纯文本句号是非常糟糕的形式。

同样,在未经许可的情况下覆盖或删除文件是非常糟糕的形式。如果你这样做,它最终会咬你或你的客户。

于 2013-04-21T00:19:33.297 回答