我想知道为什么许多网站选择使用随机 id:s 而不是在其数据库表上从 1 递增。我搜索了没有找到任何充分的理由,有吗?
另外,使用哪种方法最好?在插入数据之前检查 id 是否已经存在似乎效率很低(需要第二次查询)。
谢谢你的帮助!
在幕后,他们很可能使用数据库中的增量 ID 来识别行,但是通过 URL 参数向最终用户公开的值通常被制成随机字符串,以使可用对象的序列更难猜测.
这实际上是一个通过默默无闻的安全问题。它阻碍了自动化脚本继续执行增量值并尝试通过 URL 进行攻击,并且阻碍了对站点内容的自动抓取。
例如,如果 youtube 使用增量 id 而不是像 之类的值v=HSsdaX4s
,您可以通过简单地从该值开始v=1
并递增数百万次来下载每个。
顺序 ID 不能很好地扩展(它们成为分布式系统中的同步瓶颈)。
此外,您不需要检查新生成的随机 id 是否已经存在,您可以假设它不存在(因为它们太多了)。
你确定id是随机的吗?还是它们被编码?无论哪种方式都是为了安全。