使用GUID的部分作为ID

时间:2009-11-26 06:53:37

标签: asp.net-mvc guid

我正在开发一个ASP .Net MVC应用程序。我的一项操作需要id作为参数。例如:

public actionresult Detail(Guid id){
    return View();
}

如您所见,我使用Guid代替Int。问题更具美感。网址可能很长,例如localhost/Detail/0c157b42-379d-41d5-b9ba-83e9df9985b2

仅采用Guid localhost/Detail/0c157b42的部分内容是否安全?

6 个答案:

答案 0 :(得分:4)

GUID的设计方式应该是唯一的,但它的任何部分都不是。有关详细信息,请参阅this blog post。如果您需要缩短GUID,请使用它 - 例如SHA-1或(如果您没有安全性问题)MD5。

答案 1 :(得分:3)

不,这不安全。

你可以计算它的SHA-2哈希值,并取其前几个字符。

答案 2 :(得分:2)

不,您需要整个GUID,因为子集可能不是唯一的。

例如:

  

0c157b42-379d-41d5-b9ba-83e9df9985b2

     

0c157b42-379d-41d5-b9ba-83e9df9985b3

注意,只有最后一个数字不同。起点都是一样的。您不能使用GUID的尾端,因为无法预测GUID的哪一部分在创建时会发生变化。

答案 3 :(得分:0)

其他一些选择 - *如果有多个GUID以0c157b42开头的详细信息,请让URL localhost / Detail / 0c157b42显示适用的详细信息对象列表。 * URL别名 - 允许在Details对象上显示“友好URL”字段。

答案 4 :(得分:0)

您可以清除-s的GUID并将HEX转换为Base32(A-Z,0-5),这会将其缩短为16个字符。

答案 5 :(得分:-2)

有点迟到的反应,但万一有人读到这个......

根据用途,您可以提供缩短的GUID值。

例如,如果生成ID值并将其作为身份验证令牌值赋予用户,则在生成期间您可以使用多个字符并将其与其他使用值进行比较。如果匹配,则只生成一个新的并重新比较,直到其唯一。

如果您修剪GUID的哈希值也是可取的...只是为了安全。事实上,任何时候你随机生成一个值作为ID,那么你应该确保它不是“已经在使用”

相关问题