19

我需要生成 UUID 以最终存储在数据库中。我可以在客户端浏览器上从 Javascript 生成这些 UUID(这里有一些示例)吗?

这样做有什么安全风险吗?我了解任何人都可以在将 UUID 传递给服务器进行存储之前对其进行修改。所以我需要在将它们存储到数据库之前检查它们是否真的是唯一的,但除此之外,还有其他要检查的东西吗?

(对不起我的英语,请随时纠正任何语法错误)

编辑:要回答有关我为什么要这样做的问题,这是因为我可以创建一个新对象,它是 Javascript 中的标识符并将其添加到我的视图中,然后对服务器进行 AJAX 调用以将其添加到数据库中。这样,我不需要从数据库中加载它来知道它的主要标识符是什么。

4

4 回答 4

22

并不真地。只要它是一个简单的标识符,仅此而已,并且您确实在检查它的有效性和唯一性,例如,它与在 url 中具有 id 的用户帐户没有什么不同。

查看您的网址栏。我敢打赌 1296234 是这个问题的主键,但我不能用这些信息做任何事情。同样处理你的脚本。

于 2009-08-18T20:17:55.940 回答
3

是的。风险并非特定于 UUID,任何客户端生成的 ID 都有一些风险,具体取决于您对 ID 的操作。问题是验证 Javascript 非常困难。如果您接受客户端生成的 ID,则您接受来自黑客的任何 ID。

风险可能包括,

  1. 会话窃取。如果您使用 ID 来标识会话,则有人可能会使用现有 ID 作为生成的 ID,如果不采取适当的措施,服务器可能会将其视为现有会话。

  2. 重复键。真正的 UUID 是随机的,但有人可以生成重复的密钥,这会弄乱您的数据库。

您可能会找到防御这些攻击的方法,但这是被动保护。它可能会破坏在客户端生成 ID 的最初目的,这很简单。

于 2009-08-19T04:47:14.743 回答
2

您认为生成这些客户端有什么好处?老实说,最好的选择是在用户无法触及的服务器端生成它。它可能无法让您避免任何严重的安全问题,但它会减少冗余验证。

于 2009-08-18T20:18:18.327 回答
2

是否有某些原因您不能让数据库生成(增加)ID?

如果,就像你说的那样,无论如何你必须在提交之前检查值的唯一性,为什么不让你使用的任何后端语言生成它。这将使它更加不透明。

于 2009-08-18T20:18:35.627 回答