我对加密、存储密码、设计安全的 PHP 脚本等主题进行了相当多的搜索。
似乎有几个共同的主题:
- “不要尝试编写自己的加密脚本,使用现有的库(例如 PHPass)。”
- “不要为每个用户创建 MySQL 数据库,创建一个大型数据库并编写一个好的 PHP 脚本来管理您的用户、密码和他们的数据。”
现在,是我,还是这两个似乎没有一点冲突?
让我们举这个例子。我想创建一个用户可以创建帐户的网站。他们可以添加敏感信息(例如他们的家庭住址),然后他们可以在网站上查看或编辑这些信息。此敏感信息不应公开,也不应提供给网站的任何其他用户。它应该是“只为用户的眼睛”。
有一个管理员应该能够读取敏感信息(例如向每个客户发送一封信),但当然不能读取密码。如果认为有必要,这可以在本地完成,即。不允许管理员通过 Internet 访问。
可以采取一切预防措施来使用最新版本、最佳实践等。该网站可以从物理安全且不与任何其他任务共享的专用机器上运行。
那么,为什么不为站点的每个用户创建 MySQL 用户呢?既然 MySQL 已经提供了这个功能,为什么还要滚动你自己的 PHP 脚本来创建用户,然后将此信息存储在数据库的表中?实际原因是什么?我们是否认为使用 PHPass(或替代方法)提供比 MySQL 内置的“更安全”的密码存储?
MySQL 数据库中的存储是否被视为“不安全”。如果您对我的机器有本地访问权限,但没有管理员或 root 密码或其他用户/密码组合用于我的 MySQL 数据库,那么您仍然能够获取所有数据吗?
如果为网站的每个用户创建一个 MySQL 用户被认为是“可接受的”,那么为什么不为每个用户创建一个新的数据库或表并在 MySQL 中设置权限,以便每个用户只能访问他们的数据而不能访问其他内容呢?当然,具有本地访问权限和 root 密码的管理员可以读取所有信息。
因此,通过设计,创建用户和分配权限的功能似乎已经内置到 MySQL 中,为什么要编写 PHP 脚本来做同样的事情呢?
///
一个后续问题。
如果这是可行的,那么 PHP 脚本需要一个 MySQL 用户来创建新用户。这会将它的用户/通行证以明文形式存储,没有办法解决这个问题吗?
现在,理想情况下,这个 MySQL 用户将无法读取/写入或对任何现有数据库执行任何操作,但能够创建新用户、创建新数据库/表并为这个新用户分配权限。
这可能吗?