Php 数据库-如何;“安全”;数据库针对;猜测;记录

Php 数据库-如何;“安全”;数据库针对;猜测;记录,php,mysql,database,Php,Mysql,Database,我有一个小难题,即如何在“猜测”其ID之前保护数据库中的数据,例如我们有一个地址: http://example.com/users/34/edit 在这之后,我们可以得出结论,35将是另一个用户,有人可能会尝试猜测条目。那么,怎样才能最好地保护自己不受这种情况的影响呢? 我正在考虑在UUID上用INT-AI替换PK(在应用程序端生成),但它不会显著降低效率吗? 预计条目数量约为12000条,此外,此ID之后将链接,例如,配置文件。 你觉得怎么样 选择UUID。12000条记录不会对性能产生任

我有一个小难题,即如何在“猜测”其ID之前保护数据库中的数据,例如我们有一个地址:

http://example.com/users/34/edit
在这之后,我们可以得出结论,
35
将是另一个用户,有人可能会尝试猜测条目。那么,怎样才能最好地保护自己不受这种情况的影响呢?
我正在考虑在
UUID
上用
INT-AI
替换
PK
(在应用程序端生成),但它不会显著降低效率吗?
预计条目数量约为12000条,此外,此ID之后将链接,例如,配置文件。

你觉得怎么样

选择UUID。12000条记录不会对性能产生任何重大影响,无论您如何生成主键。作为奖励,如果您想要进行分片或任何类型的分布式系统,您将很快发现UUID是维护此类系统的唯一方法。

其他选项(除了使用UUID作为密钥):

在ID之外创建一个随机数或UUID(而不是代替ID)。将其作为同一表中的列存储在DB中。然后生成类似{UUID或random number}/edit的URL。仅当UUID或随机数与数据库中的UUID或随机数匹配时,才允许编辑

如果不想存储额外的列,可以加密id并使用类似{encryptedd}/edit的URL。在编辑期间,您将解密id,并编辑解密的id。除了id之外,还可以使用加密的id-因此,在允许编辑之前,您将验证解密的id是否与数据库中的id相同(对应于id)

或者使用URL中表中的另一列,例如{LastName}/edit,仅当姓氏与对应于id的数据库中的现有数据匹配时才允许编辑


或者,您可以在服务器上简单地进行会话或HTTP基本身份验证。几乎所有浏览器都支持基本身份验证()-当您输入用户名/密码时,它们会提示您输入用户名/密码。或者,您可以使用类似

的URL,如果您使用会话来保存用户登录,请将其ID与请求的数据进行比较。如果是管理员用户,他们可以访问任何一个数据。这只是一个虚构的简化示例来说明这个问题吗?因为我的堆栈溢出编辑配置文件链接看起来像
https://stackoverflow.com/users/edit/13508
这不是问题。(事实上,我不明白他们为什么还要添加用户ID,因为他们肯定不需要它。)