使用user_id或使用uuid显示用户配置文件的Web应用程序

时间:2014-01-10 18:54:24

标签: security web-applications user-profile

我正在使用Grails开发Web应用程序。我的Web App拥有拥有个人资料的用户。当我想查看某人的个人资料时,我有两个选择:使用userid(这是顺序的并且可以猜到)或在用户个人资料中创建一个uuid字段并对其进行索引,因此当为用户生成链接时,uuid是作为它的一部分,servlet可以读取uuid params并找到它的用户。

这是我最初的想法,即不暴露用户ID,因为它们是顺序和可猜测的。我只是不希望有人写一个for循环并替换userid的值并拉出所有配置文件。链接是这样的:

Non-Secure with profile id:
www.xyz.com/profile/user/123

Secure with uuid:  
www.xyz.com/profile/user/550e8400e29b41d4a716446655440000

有没有更好的方法来保证这一点,或者我正在做的事情是否合理到足以坚持下去?

1 个答案:

答案 0 :(得分:0)

UUID是唯一的,如果你为每个用户生成一个UUID,那么关键所属的用户显然无法猜测。

但是,UUID是计算的,通常是增量的。它们不是随机的。因此,他们仍然可以猜到一些。尝试在同一台机器上生成一系列UUID(紧接着另一台),您会注意到大部分数字是相同的。实际上,如果在同一台机器上生成所有UUID,您也可以删除UUID的机器ID部分以节省空间。

如果您在客户端生成UUID,至少它们会有所不同,因为每个机器ID部分会有所不同。

相反,请考虑散列电子邮件地址和用户ID。 SHA1创建的哈希值(以十六进制形式)比UUID示例(32字节)长8个字节(40个字节)。

如果您真的想要,可以在生成哈希时检查重复项,但如果您在SHA1中发现了冲突,我认为您赢了奖品。好吧,至少你会出名,我会说,“我什么时候认识你......”。