我正在努力实现一个环境,即多个网站将使用与PHP自己的MySQL数据库实例完全相同的PHP副本。这显然意味着每个网站的连接凭证,越多的用户密码越多,因此更适合黑客的目标。只是为了确保每个人都在同一页这些都是我在谈论的凭据...PHP:确保数据库连接凭据的安全
$user = 'user';// not actual user, not root either
$pass = 'pass';// not actual password
$server = 'localhost';
$database = mysql_connect($server,$user,$pass,true|false);
所以,我说的是用来密码连接到数据库中,而不是在密码数据库(为了澄清我用盐和胡椒粉进行了散列)。
我还没有读过任何我认为可以远程表明您可以拥有100%安全的安全性的东西,因为显然服务器需要连接到数据库并为访问者全天候地获取内容;如果我错了,我很想听听这是如何做到的。因此,让我们假设黑客拥有root用户访问权限(或者如果这并不意味着访问PHP代码,那么我们就说可以访问所有的PHP源代码),并且他们(在这种情况下)希望访问/修改/等数据库。如果我们无法阻止他们访问PHP源代码,那么我们希望尽可能减慢它们的速度。我可以将每个站点/数据库连接密码保存在每个站点的单独文件中(可以像我在完成多域支持后的几周内),而不是在public_html(显然)内部。我使用序列化和反序列化来存储某些变量,以确保当共享主机上的数据库变得不可用时防止某种程度的容错性(防止站点A查看并像站点B一样操作,反之亦然),因为数据库有时可能无法使用多次一天(我的数据库错误日志被写入SQL服务再次可用并捕获这些“离开”错误)。我想到的一个想法是确定一种将密码存储在一个散列中的方法,并将它们散列为用于通过PHP连接到数据库,尽管我希望对此有一些意见。
如果有人从数据库的角度有一个建议(例如有限制用户选择,插入,删除,更新等,并且不允许DROP和TRUNCATE作为例子)我主要关心的是确保我是SQL中立的因为我打算最终从MySQL迁移到PostgreSQL(这可能或可能不相关,但如果最好提及它)。我目前使用phpMyAdmin和cPanel,phpMyAdmin显示连接的用户与站点的数据库用户名不同,所以在这方面,我仍然可以使用该用户的某些命令(DROP和TRUNCATE作为示例再次)并限制SITE用户的权限,除非我出于某种原因被误认为?
有没有办法配置连接凭证被接受的地方的上下文?为了澄清,访问源代码的黑客不会像合法用户那样访问站点。
另一个想法是基于系统的加密,是否存在一个近乎普遍的(如在每个或几乎每个LAMP Web主机设置中)网络托管技术,其中系统可以通过Apache读取/写入文件会引入一个黑客必须确定一种避开方法的新层?
我对每个用户当然使用不同的密码。
我目前在共享主机,但希望我的设置将最终扩展到专用主机。
那么对我的安全概念有什么想法以及我可以尝试使我的数据库连接凭证更安全吗?
说明:我正在寻找我可以追求的想法。如果对任何建议有不同意见,请澄清并解释您的担忧,以替代对特定方法进行辩论,因为我可能甚至可能没有考虑过让别人开始追求某个给定的概念。谢谢!
这不是一个建设性的问题,不适合SO,请发表具体问题,这只会导致辩论和讨论。 – Jakub 2012-01-05 15:07:59
我看不出如何提高存储数据库凭证的安全性不具有建设性。我不想为辩论寻找辩论,我会在我的问题上加上澄清。 – John 2012-01-05 15:16:38