【发布时间】:2012-01-05 14:58:22
【问题描述】:
只是为了确保每个人都在同一页面上,这些是我正在谈论的凭据...
$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 全天候为访问者获取内容;如果我弄错了,我很想听听这怎么可能。
因此,假设黑客具有 root 访问权限(或者,如果这并不意味着可以访问 PHP 代码,我们就说可以访问所有 PHP 源代码)并且他们(在这种情况下)希望访问/修改/等数据库。如果我们无法阻止他们访问 PHP 源代码,那么我们希望尽可能地减慢他们的速度。对于每个站点,我可以将每个站点/数据库连接密码保存在单独的文件中(可以像在完成多域支持几周后)而不是 public_html 内部(显然)。我使用序列化和反序列化来存储某些变量,以确保当数据库在共享主机上变得不可用时具有一定程度的容错(防止站点 A 看起来和像站点 B 一样行事,反之亦然),因为数据库有时会多次变得不可用一天(当 SQL 服务再次可用并捕获这些“远离”错误时,将写入我的数据库错误日志)。我想到的一个想法是确定一种将密码存储在一个哈希中并取消哈希以用于通过 PHP 连接到数据库的方法,尽管我也想对此提出一些意见。
如果有人从数据库的角度提出建议(例如,能够将用户限制为 SELECT、INSERT、DELETE、UPDATE 等,并且不允许 DROP 和 TRUNCATE 作为示例),我主要关心的是确保我是 SQL 中立的我计划最终从 MySQL 迁移到 PostgreSQL(这可能是相关的,也可能不是相关的,但如果最好提及它)。我目前使用 phpMyAdmin 和 cPanel 并且 phpMyAdmin 显示连接的用户与站点的数据库用户名不同,因此在这方面我仍然可以对该用户使用某些命令(再次以 DROP 和 TRUNCATE 作为示例)并限制 SITE 用户权限,除非不知为何我弄错了?
有没有办法配置接受连接凭据的上下文?澄清一下,有权访问源代码的黑客不会像合法用户那样访问该网站。
我脑海中闪过的另一个想法是基于系统的加密,是否有一种近乎通用的(如在每个或几乎每个 LAMP 网络主机设置中)网络托管技术,系统可以通过 Apache 读取/写入文件,这将引入一个黑客必须确定绕过方法的新层?
当然,我为每个用户使用不同的密码。
我目前使用的是共享主机,但希望我的设置最终会扩展到专用主机。
那么对于我的安全概念有什么想法,我可以尝试哪些其他概念来使我的数据库连接凭据更安全?
澄清:我正在寻找我可以追求的想法。如果对任何建议存在分歧,请要求澄清并解释您的担忧,而不是辩论给定的方法,因为我可能甚至可能没有考虑过,更不用说开始追求给定的概念了。谢谢!
【问题讨论】:
-
这不是建设性问题,不适合 SO,请发表具体问题,这只会引发辩论和讨论。
-
我看不出提高存储数据库凭据的安全性是多么没有建设性。我不是在寻找想法的辩论,我会在我的问题中添加澄清。