繁体   English   中英

CGI脚本中的纯文本密码是安全漏洞吗?

[英]Is a plain-text password in a CGI script a security hole?

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

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

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

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

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

是。 确切地说,只需确保该目录在webroot之外。

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

我的脚本是用Perl btw编写的。

我会考虑使用其中一个Config :: *模块。

值得一提的一个问题是特定于共享托管。

如果您在与其他用户共享的主机上,则可能无法从中隐藏密码。 这取决于操作系统和Web服务器的配置详细信息。

例如,在Linux上具有Apache配置是常见的,其中用户提供网站以使文件对于web服务器用户可读或可写的唯一方式是使它们对所有用户可读/可写。

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

有针对性的对策,但它们使用户复杂化,因此许多主机不实现它们。

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

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

你已经得到了比我能提供的更好的答案,但作为一个说明:

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

以同样的方式,在没有请求权限的情况下覆盖或删除文件的形式非常糟糕。 如果你这样做,它最终会咬你或你的客户。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM