【发布时间】:2012-11-26 23:45:34
【问题描述】:
我总是在我的数据库中包含一个具有自动增量功能的列 ID。有什么理由我不想将其用作社交网站的用户 ID。该 ID 将为公众所知并在 URL 中使用,等等。认为这比添加另一个功能来为成员创建单独的唯一 ID 更容易。只是想看看其他人在我的代码中使用它之前是否发现了任何问题。
【问题讨论】:
我总是在我的数据库中包含一个具有自动增量功能的列 ID。有什么理由我不想将其用作社交网站的用户 ID。该 ID 将为公众所知并在 URL 中使用,等等。认为这比添加另一个功能来为成员创建单独的唯一 ID 更容易。只是想看看其他人在我的代码中使用它之前是否发现了任何问题。
【问题讨论】:
ID 本身会泄露信息,使第三方能够估计他或她在您的网站上注册的日期。因此,如果 Alice 是 Bob 的朋友,并且知道她去年注册并且他在 3 天后关注并且她的 id 是 100,而他的 id 是 150,她就会知道 Carol,她不是她的朋友,当时在您的网站上注册了,并且不是 Carol 声称的“最近”,而是试图在您的社交媒体网站上为她与 Alice 不是“朋友”寻找借口!
这是个问题吗?您将自己决定,但就我个人而言,我更愿意有点专业/偏执(这两个经常在一起,无论这对我们的职业意味着什么!)并避免在 URL 中包含自动增量 ID,即使是最轻微的安全性/隐私问题。或者至少,建议你成为:-)
如果您决定走 Virtue 的道路,您可能需要考虑其他 id 也会泄露信息(例如,如果 Alice 发现她的个人资料 id 比 Bob 的数字小,她会比她声称的更早认识 Carol) .因此,虽然您似乎可以添加一个 GUID 列,并将其用作辅助 id,可以安全地包含在 URL 中,但最好从自动增量 id 切换到使用 GUID。 (更多关于 GUID 的信息:http://en.wikipedia.org/wiki/Globally_unique_identifier)
希望有所帮助:-)
【讨论】:
我也认为,这是解决基本问题的规范方法。
它还使链接到具有其他用户 ID 的其他站点变得微不足道:只需有一个带有用户 ID 的表(如您所描述的)、其他站点 ID(来自 foreign sites 表)、用户 ID 在那里使用。
我观察到的唯一缺点是,当一些脚本小子使用 n、n+1、n+2... 来测试具有易受攻击密码的用户 ID 时。虽然随机 ID 使这变得更加困难,但我个人认为,这应该在其他地方处理。
【讨论】:
我认为这是一种完全有效的方法。如果您想支持用户的唯一 ID(例如,如果他们想要唯一的 user_id),您可以稍后将其作为单独的列添加到用户表中。
【讨论】:
不,您没有理由不想将其用作 user_id。
如果您将其他列设置为 id,您将遇到以下问题:
此外,如果您通过主键(也是 AUTO_INCREMENT)执行 SELECT 过滤,则在表中查找特定用户会更快。
【讨论】: