PHP:保护数据库连接凭据

Joh*_*ohn 2 php database security

我正在努力建立一个环境,在这个环境中,多个网站将使用相同的PHP副本,并使用自己的MySQL数据库实例.这显然意味着每个网站的连接凭证,用户越多,密码越多,因此黑客的目标越可取.只是为了确保每个人都在同一页面,这些是我正在谈论的凭据......

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

所以我在谈论用于连接数据库的密码,而不是数据库中的密码(为了澄清我已经用盐和胡椒粉碎).

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

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

如果有人从数据库角度提出建议(例如,能够将用户限制为SELECT,INSERT,DELETE,UPDATE等,并且不允许DROP和TRUNCATE作为示例),我主要关心的是确保我是SQL中立的,因为我打算最终从MySQL迁移到PostgreSQL(这可能是也可能不相关,但如果最好提及它).我目前使用phpMyAdmin和cPanel和phpMyAdmin显示连接的用户与站点的数据库用户名不同,因此在这方面我仍然可以使用某些命令(再次使用DROP和TRUNCATE作为示例)并限制SITE用户权限,除非我出于某种原因弄错了?

有没有办法配置连接凭据被接受的位置的上下文?为了澄清,有权访问源代码的黑客不会像合法用户那样访问该站点.

我想到的另一个想法是基于系统的加密,是否存在近乎通用(如在每个或几乎每个LAMP Web主机设置中)的Web托管技术,其中系统可以通过Apache读取/写入文件,这将引入新的黑客必须确定一种规避方式的层?

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

我目前正在共享托管,但希望我的设置最终可以扩展到专用托管.

那么我对安全概念的想法是什么?我可以尝试哪些其他概念来使我的数据库连接凭证更安全?

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

cod*_*gar 5

尝试减慢已经拥有对系统的root访问权限的入侵者几乎没有什么好处.即使你设法隐藏了足够的凭据以阻止它们,他们已经可以访问你的系统,并且可以通过一百万种方式造成严重破坏,包括修改代码以做任何他们想做的事情.

你最好的选择是专注于防止坏人穿透你的外部防御,只有在你确定你已经尽一切可能让他们留在大门之后才能担心其余部分.

话虽如此,如果您的架构允许,将数据库用户帐户限制为仅特定的特权子集绝对不是一件坏事.