使用int作为主键是否存在安全风险?

时间:2015-12-16 15:42:01

标签: sql-server asp.net-mvc

我已经阅读了很多关于“int vs GUID for primary key”问题的文章,并且可以看到,如果使用顺序GUID,则无需过多担心性能。

我的老板想要使用GUID的原因是他觉得它更安全。我们将所有参数加密为MVC调用,所以我不确定我是否看到了这个问题,但他的主要论点是,配备一个密钥(假设它们可以破解加密),那么很容易猜到下一个密钥。您无法使用GUID执行此操作,即使使用伪顺序GUID(例如COMB(http://csharptest.net/1250/why-guid-primary-keys-are-a-databases-worst-nightmare/))。

但是使用int真的那么不安全吗? (我们使用Triple DES加密。)使int64主键“几乎顺序”有任何里程 - 即它们总是上升但在序列中留下空白?

如果有人对此安全方面有任何意见,我将不胜感激。

3 个答案:

答案 0 :(得分:3)

关键安全性是防止用户访问某些项目。如果您在网址中使用整数,则只需将您的ID替换为近一个。例如,如果您的网址为http://mysite/someresource/1/,则可以将其替换为http://mysite/someresource/2/

使用GUID要困难得多,因为它需要更多的尝试才能找到另一个id。但是,它就像乐透。你可以很幸运。因此,它仍然不安全。

唯一安全的方法是每次检查用户是否有权访问所请求的资源。

我不知道你加密参数的原因?如果要限制访问权限,则不太安全。有人仍然可以将其传递给其他人(复制/粘贴),而其他人可以访问它。社会工程。

答案 1 :(得分:1)

如果用户想要访问资源" 1"或" 2"你必须检查他是否有权访问它。如果您使用Guid" A"这将是相同的。或" B"。

答案 2 :(得分:1)

你可以同时使用int,int用于内部使用(如果你担心性能)和GUID用于外部(例如在web服务的web url中),如果你有跨站点对象,你也可以从GUID中受益(对于在几个商店之间转移的示例项目,guid可以作为全局标识符。