2

我注意到 SO 和其他网站使用用户表的自动递增主键作为可公开查看的用户 ID(至少我认为这是他们正在做的事情)。在 SO 的情况下,如果您知道或可以猜到他们的用户 ID,则可以查看用户的个人资料。

在实现类似的用户 ID 生成方式之前需要考虑哪些事项?我正在开发一个非商业应用程序,它依赖于“朋友”的概念在用户之间分配各种权限,但我希望所有用户的基本个人资料都可以在一个简单的 url 上查看,例如app.com/users/userid. 只有该用户已确认的“朋友”才能访问更详细的个人资料信息。

我想我的问题是,用户 ID 的“可猜测性”是否表明了像这样的系统的固有安全性,或者,这一切都是以实际实现单个功能的方式吗?有什么我可能不会考虑的事情会使其不明智吗?我绝对应该避免使用这些用户 ID 做什么?

注意:我不关心“竞争对手”根据最近用户的数量或用户之间的变化率知道或猜测我有多少用户。

4

2 回答 2

2

OWASP - 不安全的直接对象引用

对主题进行了很好的处理。事实上,在开发 Web 应用程序时,我强烈推荐使用 OWASP 作为安全指南。我总是根据网站上发现的 TOP 10 安全威胁来评估我的 Web 项目。

于 2012-02-23T20:07:15.510 回答
1

这根本不是问题。事实上,我几乎会说相反的说法:如果您为了安全而不得不隐藏 URL 中的参数,那么您做错了;安全性应在代码中处理。

从您的问题来看,您似乎已经在以正确的方式考虑安全性,因此您应该对 URL 中的主键没问题。

拥有一个不存储信息的primary_key(如auto_incremented id)也很好,因为它永远不会改变。如果您将用户名之类的信息放在 URL 中,您要么永远不希望人们能够编辑他们的用户名,要么处理他们这样做时可能留下的损坏链接(请记住,他们可能在您的网站以外的网站上)。

在您的 URL 中具有 auto_incremented id 的唯一信息可能会泄漏,即一个用户将知道他们是之前还是之后的用户。这不太可能是一个问题(并且可能无论如何都不可靠)。

于 2012-02-23T19:52:27.323 回答