首页 > 解决方案 > 在 GitHub 上的 repo 上保存服务器凭据:建议

问题描述

从 wev developer 的角度考虑,一个公共运行的站点,其代码要公开,但是站点上的一些数据事务是通过 php 到 MySQL 服务器发生的。

像这样的代码通常是,

 <?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?> 

放置在connect.php用于启动连接的文件中。

  1. 防止通过 GitHub 公共存储库公开访问此文件内容的最佳方法是什么。

  2. 如果使用以防万一.gitignore从 repo 中删除文件,我们是否仍然可以使 repo 与 webserver 的服务目录保持同步。

想知道推荐的方法是什么。

标签: phpgitgithubpasswordsconfig

解决方案


你从错误的角度来处理这个问题。解决方案是永远不要将机密信息放入 Git 或任何其他 VCS。

不要硬编码用户名和密码。将它放在变量中的全部原因是因为这些细节应该是可变的并且来自文件外部。

通常推荐的做法有两种:

  1. 将用户名和密码存储在环境变量中。在 PHP 中使用环境变量非常容易,它可以确保这些值在您的 VCS 之外。
  2. 将用户名和密码存储在 Web 根目录之外的配置文件中。配置文件可以是 PHP 文件或 INI 文件。重要的是不要将其包含在 VCS 中,也不要将其放在可通过 Internet 访问的地方。然后,您可以包含该文件或用于parse_ini_file()获取配置设置。如果可以的话,您也可以将它包含在虚拟主机配置文件中。

另一个注意事项:

无论如何,您的代码都容易受到凭据泄漏的影响。永远不要手动检查 MySQLi 连接错误。请阅读我们是否应该手动检查 mysqli_connect() 错误?

使用 MySQLi 连接的正确方法是:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', $env_dbusername, $env_dbpassword, 'db_test');
$mysqli->set_charset('utf8mb4'); // always set the charset

如果可以,请避免使用 MySQLi 并改用 PDO。


推荐阅读