Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Security - Fatal编程技术网

PHP:保护数据库连接凭据

PHP:保护数据库连接凭据,php,database,security,Php,Database,Security,为了确保每个人都在同一页上,这些是我要说的凭证 $user = 'user';// not actual user, not root either $pass = 'pass';// not actual password $server = 'localhost'; $database = mysqli_connect($server,$user,$pass,true|false); 所以我说的是用于连接数据库的密码,而不是数据库中的密码(为了澄清起见,我已经用盐和胡椒混合了这些密码) 我

为了确保每个人都在同一页上,这些是我要说的凭证

$user = 'user';// not actual user, not root either
$pass = 'pass';// not actual password
$server = 'localhost';
$database = mysqli_connect($server,$user,$pass,true|false);
所以我说的是用于连接数据库的密码,而不是数据库中的密码(为了澄清起见,我已经用盐和胡椒混合了这些密码)

我没有读到任何我认为远程建议您可以拥有100%万无一失的安全性的内容,因为服务器显然需要连接到数据库,并为访问者提供24/7的内容;如果我错了,我很想知道这是怎么可能的

因此,让我们假设黑客具有根访问权限(或者如果这并不意味着可以访问PHP代码,那么就说可以访问所有PHP源代码),并且他们(在这种情况下)希望访问/修改/etc数据库。如果我们不能阻止他们访问PHP源代码,那么我们希望尽可能降低他们的速度。我可以将每个站点/数据库连接密码保存在每个站点的单独文件中(就像我在完成多域支持后的几周内一样),而不是保存在public_html中(显然)。我使用serialize和unserialize来存储某些变量,以确保当数据库在共享主机上变得不可用时(防止站点A看起来和行为像站点B一样,反之亦然),具有一定的容错级别,因为数据库有时一天会变得多次不可用(我的数据库错误日志会在SQL服务再次可用并捕获这些“远离”的错误时写入)。我想到的一个想法是确定一种方法,将密码存储在一个散列中,并将其解散列以用于通过PHP连接到数据库,尽管我也希望对此发表一些意见

如果有人从数据库角度提出建议(例如,有能力限制用户选择、插入、删除、更新等,并且不允许删除和截断作为示例),我主要关心的是确保我是SQL中立的,因为我计划最终从MySQL迁移到PostgreSQL(如果更好的话,这可能相关,也可能不相关)。我目前使用phpMyAdmin和cPanel,phpMyAdmin显示连接的用户与站点的数据库用户名不同,因此在这方面我仍然可以使用某些命令(再次以DROP和TRUNCATE为例)与该用户一起,并限制网站用户权限,除非我出于某种原因弄错了

有没有一种方法可以配置接受连接凭据的上下文?为了澄清,可以访问源代码的黑客不会像合法用户那样访问站点

我脑海中闪过的另一个想法是基于系统的加密,是否有一种近乎通用的(就像在每个或几乎每个LAMP web主机设置中一样)web托管技术,系统可以通过Apache读/写文件,这将引入一个新的层,黑客必须确定一种绕过该层的方法

当然,我为每个用户使用不同的密码

我目前在共享主机上,但希望我的设置最终能扩展到专用主机

那么,关于我的安全概念有什么想法,我可以尝试哪些其他概念来提高数据库连接凭据的安全性呢


澄清:我正在寻找我可以追求的想法。如果对任何建议有异议,请要求澄清并解释您的担忧,而不是辩论某个给定的方法,因为我可能甚至没有考虑过,更不用说开始追求某个给定的概念了。谢谢!

击溃已经拥有系统root访问权限的入侵者。即使你成功地隐藏了足够好的凭据以阻止他们,他们已经可以访问你的系统,并可能以无数种方式造成严重破坏,包括修改代码以执行他们希望执行的任何操作

你最好的办法是集中精力防止坏人侵入你的外部防御,只有在你确保尽一切努力让他们留在大门前,才担心其他人


话虽如此,如果您的体系结构允许,将数据库用户帐户限制为权限的某一子集肯定不是一件坏事。

正如code_burgar所说,一旦您的box给出root,就为时已晚了。也就是说,我不得不在我之前参与的一个项目上实施额外的安全措施。T他提出了将配置文件存储在加密分区中的解决方案,这样可以直接访问机器的用户就无法通过将驱动器连接到另一台电脑来获取密码。当然,这是文件系统权限之外的内容,因此用户无法从操作系统内部读取该文件

另一个值得一提的细节是,如果你真的对安全性有妄想症,那么:

$user = 'user';// not actual user, not root either
$pass = 'pass';// not actual password
$server = 'localhost';
$database = mysql_connect($server,$user,$pass,true|false);

unset($user, $pass, $server);  // Flush from memory.
您可以
在使用后取消设置关键变量,确保它们不能从内存中转储或检索


祝你好运,希望这会有所帮助。

你希望在层中实现安全性。是的,如果攻击者具有根访问权限,你的处境非常糟糕-但这并不意味着你不应该保护自己免受较低级别的渗透。这些建议中的大多数可能很难在共享主机上实现

假设您使用的是一家像样的主机提供商,以及LAMP的最新版本,那么获得root访问权所需的努力是巨大的——除非您是一个非常有利可图的目标,否则这不是您最大的担忧

我假设您适当地强化了服务器和基础结构,并检查它们是否正确配置。您还需要关闭不需要的服务-例如,如果您有一个FTP服务器正在运行,则可以强行输入密码的攻击者不需要root用户就可以进入

您可能要做的第一件事是确保应用程序代码没有漏洞,并且您有一个强大的密码策略
require('../db/DBConnection.php');