保护 MySQL 个 ID 号码,使它们不连续
Securing MySQL id numbers so they are not sequential
我正在开发一个小包,使用 PHP 和 MySQL 来处理事件条目。完成报名表后,用户将在一个名为 website.com/entrycomplete.php?entry_id=15 的页面上看到他的所有详细信息,其中 entry_id 是一个序号.显然,爱管闲事的人很容易更改 entry_id 号码并查看其他人的条目。
有没有简单的伪装方法entry_id?显然,我不希望确保英格兰银行的安全,所以一些简单易行的事情就可以完成这项工作。我想过使用 MD5,但它会产生很长的字符串,所以也许有更好的方法。
Security through obscurity 一点安全感都没有。
即使 ID 是随机的,也不会阻止用户请求几千个随机 ID,直到他们找到一个与您数据库中存在的条目相匹配的 ID。
相反,您需要保护用户的访问权限,并禁止他们查看不应允许他们查看的数据。
那么id是不是连续的就无所谓了。
更好的实现方式是只显示属于该用户的记录。假设 id
是每个用户的唯一标识符。现在将 entry_id
和 id
存储在您的 table 中(比如 table 名称是 entries
)。
现在当用户请求记录时,在 mysql 查询中添加另一个条件,如下所示
select * from entries where entry_id=5 and id=30;
所以如果entry_id 5
不属于该用户,则根本不会有任何结果。
为了限制用户不改变自己的 id
,您可以实施 jwt tokens
。您可以在登录时提供令牌并将其添加到每次通话中。然后,您可以在后端解密令牌并从中获取用户的实际 id
。
如果用户确实有某种形式的 authentication/login,请使用它来确定是否允许他们查看特定的条目 ID。
如果不是,则不要使用 url 参数作为 id,而是将其存储在 cookie 中并从中读取。请注意,这仍然不安全。您可以采取的另一个步骤(不需要用户身份验证)是对 cookie 进行加密签名。
我正在开发一个小包,使用 PHP 和 MySQL 来处理事件条目。完成报名表后,用户将在一个名为 website.com/entrycomplete.php?entry_id=15 的页面上看到他的所有详细信息,其中 entry_id 是一个序号.显然,爱管闲事的人很容易更改 entry_id 号码并查看其他人的条目。
有没有简单的伪装方法entry_id?显然,我不希望确保英格兰银行的安全,所以一些简单易行的事情就可以完成这项工作。我想过使用 MD5,但它会产生很长的字符串,所以也许有更好的方法。
Security through obscurity 一点安全感都没有。
即使 ID 是随机的,也不会阻止用户请求几千个随机 ID,直到他们找到一个与您数据库中存在的条目相匹配的 ID。
相反,您需要保护用户的访问权限,并禁止他们查看不应允许他们查看的数据。
那么id是不是连续的就无所谓了。
更好的实现方式是只显示属于该用户的记录。假设 id
是每个用户的唯一标识符。现在将 entry_id
和 id
存储在您的 table 中(比如 table 名称是 entries
)。
现在当用户请求记录时,在 mysql 查询中添加另一个条件,如下所示
select * from entries where entry_id=5 and id=30;
所以如果entry_id 5
不属于该用户,则根本不会有任何结果。
为了限制用户不改变自己的 id
,您可以实施 jwt tokens
。您可以在登录时提供令牌并将其添加到每次通话中。然后,您可以在后端解密令牌并从中获取用户的实际 id
。
如果用户确实有某种形式的 authentication/login,请使用它来确定是否允许他们查看特定的条目 ID。
如果不是,则不要使用 url 参数作为 id,而是将其存储在 cookie 中并从中读取。请注意,这仍然不安全。您可以采取的另一个步骤(不需要用户身份验证)是对 cookie 进行加密签名。