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