Manual:Securing database passwords/zh

默认包含 MySQL 数据库用户 ID 和密码. 将这些凭据保存在 LocalSettings.php 中是有风险的，因为在极少数情况下，PHP 文件可以作为纯文本向外界公开这些凭据：


 * PHP 在服务器上被禁用
 * PHP 本身崩溃
 * 您在该域的任何地方都有 CGI search.pl（一个常见的 CGI 搜索脚本）. 漏洞描述.

如果在这些罕见的情况下你想保护你的 MySQL 用户名和密码，它们不应该是 LocalSettings.php 文件的一部分.



Webroot 之外的 MySQL 密码
永远不要将 MySQL 密码放在 Web 根目录中的文本文件中. 您可以通过以下方式避免这样做：


 * 在您的网络根目录之外创建一个目录. 例如，如果您的网站位于“ ”，则在您的 Web 根目录之外创建一个名为“external_includes”的目录：
 * mkdir /external_includes
 * 在您刚刚创建的目录中创建一个名为“mysql_pw.php”的文件，并将每个 mysql 用户名、密码、主机名和数据库名称的变量放在单独的行中，每个变量都设置为实际值. 例如，使用 nano 作为你的编辑器：
 * nano /external_includes/mysql_pw.php
 * 使用实际值代替括号中的“mysql_”填充符，键入以下行：


 * 注意不要在文本后留下空格（空行）.
 * 保存并关闭文件. 在 nano 中是：Ctr（保存）和 Ctr（关闭）

检查您的发行版以获取网络服务器的用户. 这有所不同，示例包括“apache”、“www-data”、“nobody”、“httpd”. 然后像这样设置密码文件的权限：


 * chgrp apache mysql_pw.php
 * chmod 640 mysql_pw.php （删除其他人的访问权限和网络服务器的写入权限）
 * （对于 LocalSettings.php，可能重复 g-rxw ... ）
 * 确保文件所有者有 （或 chmod 400 LocalSettings.php）


 * 编辑您的 LocalSettings.php 文件并在文件开头添加以下行：


 * 现在从 LocalSettings.php 中删除这些变量：

$wgDBserver $wgDBname $wgDBuser $wgDBpassword

这样，如果有人能够访问和显示 LocalSettings.php，他们将看到的只是一些设置，而不是您的 MySQL 数据库的密码、用户名等，并且包含该信息的真实文件对 Web 服务器是禁止访问的. 如上所述，您仍然需要确保 LocalSettings.php 对 apache 用户只读.



参见

 * 用于发送电子邮件的设置 包含用户名和密码.  它可以用同样的方式保护