我正在开发一个ASP .Net MVC应用程序。我的一项操作需要id
作为参数。例如:
public actionresult Detail(Guid id){
return View();
}
如您所见,我使用Guid
代替Int
。问题更具美感。网址可能很长,例如localhost/Detail/0c157b42-379d-41d5-b9ba-83e9df9985b2
。
仅采用Guid
localhost/Detail/0c157b42
的部分内容是否安全?
答案 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,那么你应该确保它不是“已经在使用”