“connect.php”文件中隐藏密码的最常用方法是什么?

9
随着我的服务器变得越来越大,越来越多的用户可以访问它,我不希望他们看到MySQL用于连接PHP的密码,这个密码存储在我的“connect.php”文件中,并且被每个页面所需。然而,它只是坐在与其余php文件相同的目录中。
我考虑使用第二个类似“connect.php”的文件,只能访问一个表,该表存储连接到MySQL的加密密码,但是我将面临隐藏它的密钥的问题。
更改权限也行不通,如果你chmod o-r或者类似的操作,显然没有人能够访问Web应用程序。
是否有一种公认的方法来解决这个问题,还是我应该自己解决?问题是,如果有公认的方法,我不希望它太复杂。

1
你给用户什么样的访问权限,让他们能够首先看到PHP源代码? - gen_Eric
1
其他开发人员可以访问 Linux 服务器本身。 - Ryan Ward Valverde
6个回答

8

我强烈建议将connect.php文件移动到比DOCUMENT_ROOT更高的目录中,这样它就无法从网络服务器中访问。

你的php文件当然可以使用完整或相对路径包含connect.php文件,例如:

require_once('../connect.php');

这似乎是采取的最简单的第一步。 - Ryan Ward Valverde

7
所有答案都提供了很好的建议,但没有解决一个事实:任何具有服务器访问权限的用户都可以窥探并在编辑器中打开config.php。
将配置文件设置在一个公共网络空间之外的目录中,Web服务器应该是该目录的所有者,并且其权限应设置为700。它所包含的所有文件应该是644。这样,除了Web服务器用户或root用户,没有人甚至能够读取文件内容。
这是一种常见的方法,但是安全性是一个非常广泛的主题,涉及到更多的内容。尽管如此,这种方法仍然比90%的设置更加安全。

在这种情况下,我们假设root:root是所有者,对吧?所以,当我按照你说的方式尝试进行chmod更改时,网站变得受限,因此没有人可以看到它。 - Ryan Ward Valverde
1
在哪个发行版上? 在许多Linux发行版中,Apache用户是www-data,因此www-data将无法打开root的文件夹。使用“top”或“ps”检查您的Apache运行的用户,该用户必须拥有配置文件夹。这是我知道的配置文件的最紧密和最有效的安全措施。 - Stephane Gosselin
目前使用Ubuntu,直到我们进行硬件升级。正在查看这些建议。 - Ryan Ward Valverde
在Ubuntu上,根据文档,“User”的默认值为www-data。确保将config文件夹放在您的网站路径之外,并将该文件夹添加到php.ini中的[include_path]中。 - Stephane Gosselin
那是最好的选择。connect.php 文件只能被超级用户查看,这真的很好。非常感谢。 - Ryan Ward Valverde
当然,如果其他人可以访问该网络空间,他们可以编写一个PHP脚本来读取该文件。 - vpzomtrrfrt

2

设置$password,连接,然后unset()$password。他们永远无法恢复它。 我不认为PHP文件可以被下载或查看。它总是在服务器编译之前。


只有在某些情况下,您允许第三方代码在同一PHP实例/脚本集上运行时,这才具有任何价值。即使是这种情况,您也应该关注其他数百万个安全问题。 - cthulhu

2

除非您自愿地(或者出于错误)向用户展示,否则用户无法获取服务器端文件的内容。

最有可能的妥协方式是通过FTP访问,此时黑客将可以访问Web服务器上的所有文件。


1
它已经发生了很多次(我相信最近在Flickr或类似的大型网站上发生过),PHP运行时瞬间失败,导致Apache将文件作为纯文本发送,从而使用户查看密码。 - cthulhu

2

将它移动到www根目录下的文件夹中,比如www/includes。 然后,您可以使用htaccess来阻止查看/includes文件夹下的文件。

连接到SQL数据库后,使用unset($username, $password)以防止有人回显用户名或密码造成安全威胁。

最后,最好使用专用主机,这样其他访问Web服务器的用户就不能潜在地查看其他用户的文件。


0

或者,您可以完全摆脱密码,并配置仅接受来自本地主机的连接的DB服务器。但这只适用于专用托管,如果您使用共享托管,则存在安全风险。


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