Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何避免硬编码数据库连接密码?_Php_Database_Password Protection - Fatal编程技术网

Php 如何避免硬编码数据库连接密码?

Php 如何避免硬编码数据库连接密码?,php,database,password-protection,Php,Database,Password Protection,我正在做一个学校的项目(写一个网站),我遇到了提供连接到我们数据库的密码的问题。由于我们的开源许可证,我们必须发布源代码,但这意味着每个人都可以连接到数据库并查看数据 目前,我们的连接(一个php文件)如下所示: $host="************"; $password="************"; $this->conn = new mysqli($host, $user, $password, $dbname).mysqli_connect_error()); 现在我的问题是

我正在做一个学校的项目(写一个网站),我遇到了提供连接到我们数据库的密码的问题。由于我们的开源许可证,我们必须发布源代码,但这意味着每个人都可以连接到数据库并查看数据

目前,我们的连接(一个php文件)如下所示:

$host="************";
$password="************";
$this->conn = new mysqli($host, $user, $password, $dbname).mysqli_connect_error());

现在我的问题是:如何提供连接到数据库的密码而不需要写入
$password=…

使用单个文件包含配置变量,并在共享代码时排除此文件

例如:

require_once('config.php');
$this->conn = new mysqli($config['db']['host'], $config['db']['user'], $config['db']['pass'], $config['db']['dbname']);
config.php
文件将包括:

$config['db']['username'] = 'user';
$config['db']['password'] = 'pass';
...

您可以/应该对此进行扩展,以包括主机、端口、数据库名称等。

好的,下面是带有ini文件的:

xxx.php
$password='在此处输入密码“
readme.txt:
”在dbconfig.php文件中输入数据库凭据“
这是一个非常奇怪的问题,你无法回答。但是在mysql中,您可以限制连接有效的主机。您只允许受信任的连接。另一个选项是在发布代码之前删除实际连接详细信息。将密码写入平面文件(例如xyz.ini)并读入。如果使用空密码或伪密码分发代码,软件用户无论如何都必须更改。您还可以像这样导入其他参数(主机、用户名、数据库名)。环境变量,
包括
ing或以其他方式读取磁盘上的配置文件、php.ini中的隐式配置等。。。许多选项。在本地主机上设置一个数据库代理,首先在该主机上进行配置。应用程序可以无密码连接到代理。或者:使用生成的硬件ID作为密码,设置一次。或者:正如每个人都在评论的那样:只要它不在您的版本控制系统中,就不必麻烦了。另外,请确保您执行了
echo db_params.ini>。gitignore
;)(或您的VCS的同等产品)右@hd。另外,如果您将软件与安装脚本一起交付,那么最好在那里初始化db_params.ini文件。
<?php

    $db_params = parse_ini_file( dirname(__FILE__).'/db_params.ini', false );

    // .....

    $this->conn = new mysqli($db_params['host'], $db_params['user'], $db_params['password'], $db_params['dbname'], $db_params['port'], $db_params['socket']).mysqli_connect_error());

    // ...

?>
host=mysql.example.com
port=3306
socket=
user=testuser
password=myPasswort
dbname=myDatabase