Joe*_*Joe 10
不是关于密码存储的直接答案,但我通常在构建 web 应用程序时使用至少两个数据库连接——一个 99% 的时间用于与用户相关的活动,权限受限,另一个用于“管理员”功能(删除用户等)。
在少数情况下,我要安装其他人的软件包,我将安装两个实例……一个面向公众的实例,它只有数据库访问权限来执行一般用户类型的操作,另一个实例是 IP 限制的我的本地子网(甚至可能在不同的机器上)必须用于任何“管理员”类型的活动。但是,没有人有权修改表等……我宁愿通过本机数据库工具进入,也不愿让 webapp 运行自己的未经审查的更新任务。
不过,您可以更进一步,并专门为给定任务添加更多连接……因此,用户创建和密码管理任务通过对用户表具有额外权限的用户进行,登录具有要进行身份验证的数据库权限,除此之外别无他法, 等等。
这样,如果有 sql 注入攻击,在大多数网页上它真的不能做任何重要的事情——看不到密码哈希,不能添加新的管理员用户(不是他们能够做的)无论如何),等等。如果他们设法在您的机器上获得外壳仍然无济于事,但它会减慢他们的速度。