gpt4 book ai didi

PHP 和 MySQL - 如何避免源代码中的密码?

转载 作者:IT老高 更新时间:2023-10-28 11:48:42 27 4
gpt4 key购买 nike

我有一个小型 PHP 应用程序将数据存储在 MySQL 中。数据库。目前用户名/密码在 PHP 代码中是硬编码的。例如,我不太喜欢这种情况,因为代码也可以在存储库中使用。

我最好的想法是将数据从代码移动到配置文件(从存储库中排除),并以某种方式对其进行编码,因此不能直接读取(混淆)。有没有更好更易用的方法来解决这个问题?

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

范围:我想建立一个强大且易于使用的解决方案。我想要合理的安全性,但我不是在这里处理高度 secret 的数据。

备注:不再推荐使用mysql_connect函数,见Stack Overflow问题Why shouldn't I use mysql_ functions in PHP? *。我本可以更改代码示例,但由于一些评论提到了这个,我没有。但是,问题的原始性质仍然有效。

最佳答案

如您所说,最简单的方法是使用配置文件。

许多框架都使用它( ZendCakePHPKohana 等),这是最常见的处理方式(即使在非 PHP 环境中,例如带有 web 的 ASP.NET .config 文件)。这使您还可以通过仅复制站点的文件来将配置值从一个环境复制到另一个环境,这比依赖服务器设置环境变量(可能很快丢失和遗忘)更有优势。

您不必担心密码会被混淆,因为它不是全世界都可以访问的文件,当然也不应该可以通过网络访问。我的意思是,您可以 a) 告诉您的 Web 服务器不要提供您的配置文件(IIS 已经使用 web.config 文件执行此操作,并提供 HTTP 404.8 状态而不是内容)或 b)将其移出您的网络服务目录。如果有人可以看到您的配置文件,那比在您的源代码中包含它更糟糕。

拥有配置文件的基本(空/默认)版本也是一个好主意,并根据环境将其分开,这样您就可以为生产、开发和测试平台使用不同的配置文件.

环境变量是区分这些环境的最常用方法,类似于以下代码:

// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
// Copy from web server to PHP constant
define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}

if (!defined('ENVIRONMENT')) {
// Default to development
define('ENVIRONMENT', 'development');
}

// Load in default configuration values
require_once 'config.default.php';

// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';

另一种非常常见的方法是使用 XML 配置文件,并且只读取您需要的值(在内存中存储配置文件的缓存副本)。这可以很容易地限制为仅加载某些值,而不是允许任意包含 PHP 文件,并且在我看来总体上是一个更好的解决方案,但以上内容应该让您朝着正确的方向开始。

您可能会想要您的 VCS忽略该文件。另一方面,您可能希望文件的骨架或具有合理默认值的骨架(后者当然不适用于登录数据)进行版本控制。处理这个问题的一种常见方法是拥有一个 checkin 的模板配置文件,安装过程将该文件复制到实际配置文件的位置,在那里进行定制。这可以是手动或自动过程。

(虽然与主要问题有些无关,但为您的环境引入一个常量允许您做一些其他很酷的事情,例如推迟到假邮件实现而不是实时 SMTP 一个,但是当然这也可以通过配置文件来完成)

关于PHP 和 MySQL - 如何避免源代码中的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088979/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com