看看我见过的大多数基于 PHP/MySQL 的网站的结构,如果你稍微挖掘一下,似乎并不难辨别数据库密码,因为在某个地方总是有一个设置或配置文件来存储日志信息进入数据库。除了确保针对远程请求适当限制我的数据库权限的基本预防措施之外,我可以在自己的项目中实施哪些选项来保护这些信息?
不是关于密码存储的直接答案,但我通常在构建 web 应用程序时使用至少两个数据库连接——一个用于 99% 的时间用于与用户相关的活动,具有受限的权限,另一个用于“管理”功能(删除用户等)。
在少数情况下,我要安装其他人的软件包,我将安装两个实例……一个面向公众的实例,它只具有数据库访问权限来执行一般用户类型的东西,另一个实例是受 IP 限制的我的本地子网(甚至可能在另一台机器上)必须用于任何“管理员”类型的活动。但是,没有人可以访问修改表等……我宁愿通过本机数据库工具进入,也不愿允许 webapp 运行自己的未经审查的更新任务。
您可以更进一步,并专门为给定任务添加更多连接......因此用户创建和密码管理任务通过对用户表具有额外权限的用户进行,登录具有数据库权限进行身份验证,仅此而已, ETC。
这样,如果存在 sql 注入攻击,在大多数网页上它实际上无法做任何重要的事情——看不到密码哈希,无法添加新的管理员用户(不是他们能够做到的)无论如何)等等。如果他们设法在您的机器上获得一个外壳,它仍然无济于事,但它会减慢他们的速度。