根据NEWSEQUENTIALID,NEWSEQUENTIALID的输出是可预测的。但可预测性有多大呢?假设我有一个由NEWSEQUENTIALID生成的GUID,那么要这样做有多难:
/order?id=842告诉我应用程序中有842个订单。下面是一些背景信息,我正在做什么和各种权衡是什么。
使用GUID大于整数作为主键的安全好处之一是很难猜测GUID的。例如,假设一个黑客看到类似于/user?id=845的URL,他可能会尝试访问/user?id=0,因为数据库中的第一个用户很可能是一个管理用户。此外,黑客可以在/user?id=0..1..2上迭代以快速收集所有用户。
同样,整数的隐私缺点是泄漏信息。/order?id=482告诉我,自其实施以来,这家网店已经收到了482份订单。
不幸的是,使用GUID作为主键有着众所周知的性能缺点.为此,Server引入了NEWSEQUENTIALID函数。在这个问题中,我想了解NEWSEQUENTIALID的输出是如何可预测的。
发布于 2014-06-11 10:05:58
底层的OS函数是UuidCreateSequential。该值来自您的网卡MAC地址和每os启动增量值之一。见RFC4122。Server执行一些字节洗牌以使结果排序正确。所以,从某种意义上说,这个价值是高度可预测的。特别是,如果您知道一个值,您可以立即预测一个范围的类似值。
然而,我们不能预测id=0的等价物,也不能预测52DE358F-45F1-E311-93EA-00269E58F20D意味着该商店至少售出了482件商品。
唯一获得批准的随机生成是CRYPT_GEN_RANDOM (它封装了CryptGenRandom),但这显然是一个可怕的关键候选。
发布于 2014-06-11 08:50:49
在大多数情况下,可以通过获取当前值并将一个添加到第一个十六进制对来预测下一个newsequentialid。
换言之:
1E29E599-45F1-E311-80CA-00155D008B1C
后面跟着
1F29E599-45F1-E311-80CA-00155D008B1C
后面跟着
2029E599-45F1-E311-80CA-00155D008B1C
有时,序列将从一个新值重新启动。
所以,这是非常可预测的
NewSequentialID是windows函数UuidCreateSequential的包装器。
发布于 2014-06-11 08:40:41
·计算下一个值?是
微软说:
如果隐私是一个问题,不要使用此功能。可以猜测下一个生成的GUID的值,从而访问与该GUID相关联的数据。
所以有可能得到下一个值。如果有可能的话我就找不到情报了。
来自:http://msdn.microsoft.com/en-us/library/ms189786.aspx
编辑:关于NEWSEQUENTIALID和安全性的另几个词:http://vadivel.blogspot.com/2007/09/newid-vs-newsequentialid.html
编辑: NewSequentialID包含服务器的MAC地址(或其中之一),因此知道顺序ID会提供潜在的攻击者信息,这些信息对于安全或DoS攻击可能很有用。来自:使用NewSequentialID有什么坏处吗?
https://stackoverflow.com/questions/24158118
复制相似问题