保护 MySQL id 号,使它们不是连续的

时间:2021-06-01 17:07:13

标签: mysql md5

我正在开发一个使用 PHP 和 MySQL 处理事件条目的小程序包。完成输入表单后,用户将在名为 website.com/entrycomplete.php?entry_id=15 之类的页面上看到他的所有详细信息,其中 entry_id 是一个序列号。显然,一个爱管闲事的人改变 entry_id 号码并查看其他人的条目会很容易可笑。

是否有一种简单的方法可以伪装 entry_id?显然,我不打算保护英格兰银行,所以一些简单易行的事情就可以完成这项工作。我想过使用 MD5,但这会产生很长的字符串,所以也许有更好的方法。

3 个答案:

答案 0 :(得分:2)

Security through obscurity 根本不安全。

即使 id 是随机的,也不会阻止用户请求几千个随机 id,直到他们找到与您的数据库中存在的条目匹配的一个。

相反,您需要保护用户的访问权限,并禁止他们查看不应被允许查看的数据。

那么 id 是否是连续的就无关紧要了。

答案 1 :(得分:0)

实现此目的的更好方法是仅显示属于该用户的记录。假设 id 是每个用户的唯一标识符。现在将 entry_idid 存储在您的表中(假设表名是 entries)。

现在当用户请求记录时,像这样在mysql查询中添加另一个条件

select * from entries where entry_id=5 and id=30;

所以如果 entry_id 5 不属于这个用户,它根本不会有任何结果。

为了限制用户不更改自己的 id,您可以实现 jwt tokens。您可以在登录时提供令牌并将其添加到每次调用中。然后,您可以在后端解密令牌并从中获取用户的实际 id

答案 2 :(得分:0)

如果用户确实有某种形式的身份验证/登录,请使用它来确定是否允许他们查看特定的条目 ID。

如果不是,则不使用 url 参数作为 ID,而是将其存储在 cookie 中并从 cookie 中读取。请注意,这仍然不安全。您可以采取的另一个步骤(不需要用户身份验证)是对 cookie 进行加密签名。