mysqli连接db用户和密码设置

2 php mysql mysqli

我想弄清楚是否有一种方法可以制作一个密码恢复系统,该系统实际上隐藏了带有所有 mysqli 数据库用户名和密码的“connection.php”。这可能吗?

我发现的大多数教程都显示“connection.php”文件来连接到数据库,并且可以从源代码中查看它,这使得数据库登录信息可见。有人可以帮我解决这个问题,或者给我指出正确的方向吗?

例子:

 <?php
 $connection = mysqli_connect('localhost', 'root', 'Rvm@i[9)0?~=');
 if (!$connection){
die("Database Connection Failed" . mysqli_error($connection));
}
 $select_db = mysqli_select_db($connection, 'pixelw3p_demo');
 if (!$select_db){
die("Database Selection Failed" . mysqli_error($connection));
 }
  ?>
Run Code Online (Sandbox Code Playgroud)

这是在 connection.php 文件中,需要添加为

  require_once('connection.php');
Run Code Online (Sandbox Code Playgroud)

现在可以在源代码中看到这个 php 文件,那么您就知道要查找哪个 php 文件来获取数据库信息。有什么办法可以隐藏所有这些,这样我的数据库就不会受到攻击吗?

You*_*nse 5

说得直白一点:在 PHP 文件中包含凭据绝对没有任何问题。每个人都在谈论的是“永远不要在版本控制(例如 git)中包含的文件中存储密码、API 密钥或其他敏感信息”。

PHP 文件本身并不比 ENV、INI、JSON、XML、YAML 或其他文件差。实际上 PHP 文件甚至稍微好一点,因为它不需要严格放在文档根目录之上。此外,使用 PHP 进行配置可以更好地与您的应用程序集成。

然而真正重要的是,将所有应用程序设置放在一个单独的文件中,并从版本控制中删除,因此它永远不会进入存储库或其他服务器。

鉴于上述所有内容,使您的配置文件与源代码分离:

  • 添加该config.php.gitignore(如果您使用的是 git)

  • 创建一个名为的文件,config.sample.php并将所有变量设置为空值,如下所示

      return [
          'db' => [
              'host' => '127.0.0.1',
              'username' => '',
              'password' => '',
              'dbname' => '',
              'port' => 3306,
          ],
      ];
    
    Run Code Online (Sandbox Code Playgroud)
  • 其添加到版本控制中

  • 在您的应用程序引导文件中有这样的代码

      if (!file_exists('config.php'))
      {
          throw new \Exception('Create config.php based on config.sample.php');
      }
      $config = require 'config.php';
    
      mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
      $mysqli = new mysqli(...$config['db']);
      $mysqli->set_charset('utf8mb4');
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后,按照建议,config.php在应用程序运行的每台服务器上创建,每个服务器都有自己的一组值

您必须了解的是,此例程对于任何文件格式都是必需的,config.ini包括在内。正是这个例程使您的密码安全且可移植,而不是您选择的文件格式。