Database 如何不公开base64编码的UUID

Database 如何不公开base64编码的UUID,database,rest,security,base64,uuid,Database,Rest,Security,Base64,Uuid,我对内部数据库主键的公开有疑问。 我已决定使用UUIDs代替自动增量long(有关详细信息,请参阅)。这样,除其他外,人们无法发现我的数据的相对大小或它们随时间的增长 现在,UUID不提供任何内部信息,但它不是非常URL友好的,尽管它是URL安全的。此外,如果长PK不应该公开,那么UUIDs也不应该公开。 通常,为了使UUID更加用户友好,人们对其进行编码。 例如: 我的观点是:任何人都可以从url中获取这些base64字符串并对其进行解码,以获得原始UUID。这意味着即使在这种情况下,uuid

我对内部数据库主键的公开有疑问。 我已决定使用
UUIDs
代替自动增量long(有关详细信息,请参阅)。这样,除其他外,人们无法发现我的数据的相对大小或它们随时间的增长

现在,
UUID
不提供任何内部信息,但它不是非常URL友好的,尽管它是URL安全的。此外,如果长PK不应该公开,那么
UUIDs
也不应该公开。 通常,为了使UUID更加用户友好,人们对其进行编码。 例如:

我的观点是:任何人都可以从url中获取这些
base64
字符串并对其进行解码,以获得原始
UUID
。这意味着即使在这种情况下,
uuid
最终也会暴露出来

我应该使用其他类型的编码吗?是否有已知的东西,或者我应该创建自定义编码?如果是,我是否应该遵循任何指导原则


首先感谢您

为了能够为这些标识符提供一个小小的保密级别,您可以使用单向散列函数,例如SHA2(这是一个加密函数,而不是编码)。这实际上不会为您购买任何特定的安全优势

如果您仅依赖对象引用ID进行访问控制,并试图将其保密,那么我建议您在访问控制和授权模型上三思而后行。
拥有随机/不可猜测/无冲突的对象引用ID是很好的,但是如果您依赖引用ID的保密性来确保安全,这是一个很大的缺陷(在旧的OWASP Top10中,这被称为直接对象引用标识符问题,在OWASP 2017中,这被称为断开的访问控制问题)。您需要考虑一个完整的AAA链:依赖于具有短有效期的随机唯一令牌的访问的认证、授权、审计/问责制;稍后可用于决定系统的授权和访问级别,以与主题绑定,并允许它们与有权使用的对象进行交互。

第一次查看时,为了能够为这些标识符提供一个小小的保密级别,您可以使用单向散列函数,如SHA2(这是一个加密函数,而不是编码)。这实际上不会为您带来任何特定的安全优势

如果您仅依赖对象引用ID进行访问控制,并试图将其保密,那么我建议您在访问控制和授权模型上三思而后行。
拥有随机/不可猜测/无冲突的对象引用ID是很好的,但是如果您依赖引用ID的保密性来确保安全,这是一个很大的缺陷(在旧的OWASP Top10中,这被称为直接对象引用标识符问题,在OWASP 2017中,这被称为断开的访问控制问题)您需要考虑一个完整的AAA链:依赖于一个具有短有效期的随机唯一令牌的访问的认证、授权、审计/问责制,后者可以用来决定系统的授权和访问级别,以便与对象绑定,并允许它们与它们所授权的对象交互。d.

您不应该公开PKs的原因是它们可能(a)泄露信息,并且(b)允许人们猜测其他值。UUID(至少是v3/4/5)也是如此,这是首先使用它们的主要原因之一。您提到的人为因素是为什么这么多人使用base64(或其他)编码;这不是为了安全


也就是说,你永远不应该依赖URL保密作为安全措施;URL泄露的方式太多了,你的用户甚至可能会故意这样做——但是如果向朋友发送链接意味着朋友可以完全访问他们的帐户,他们会非常不安。

你不应该公开PKs的原因是他们可能(a)泄漏信息和(b)允许人们猜测其他值。UUID(至少v3/4/5)都不正确,这是首先使用它们的主要原因之一。您提到的人为因素是为什么这么多人使用base64(或其他)编码;这不是为了安全


也就是说,你永远不应该依赖URL保密作为安全措施;URL泄露的方式太多了,你的用户甚至可能会故意这么做——但如果向朋友发送链接意味着朋友可以完全访问他们的帐户,他们会非常不安。

你为什么在意?你的威胁模型是什么?@SLaks我正在开发一个购物车网站,我正试图设计它,考虑到未来的问题。许多在线博客说db ID不应该公开;但即使他们用UUID替换自动增量ID并对其进行编码,他们也肯定会公开它们。所以我有这个疑问。我真的不应该关心它吗?仅仅使用另一种编码只是混淆而已(隐晦的安全性)。你没有回答@SLaks的问题。你希望消除什么威胁?”许多在线博客说db ID不应该公开他们为什么这么说?你为什么在乎?你的威胁模型是什么?@SLaks我正在开发一个购物车网站,我正在尝试设计它,以解决未来的问题。许多在线博客说db ID不应该公开;但即使他们用UUID替换自动增量ID并对其进行编码,他们也肯定会公开它们。所以我得到了这是怀疑。我真的不应该关心它吗?简单地使用另一种编码只是混淆(模糊的安全性)。你没有回答@SLaks问题。你希望消除什么威胁?”许多在线博客说db ID不应该公开。“他们为什么这么说?”?
 - UUID: 7b3149e7-bdab-4895-b659-a5f5b0d0
 - base64: ezFJ572rSJW2WQAApfWw0A