在Javascript客户端创建UUID有危险吗?

时间:2009-08-18 20:15:39

标签: security uuid

我需要生成UUID以最终存储在数据库中。我可以在客户端浏览器(There are some examples here)上从Javascript生成这些UUID吗?

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

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

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

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

风险可能包括,

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

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

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

答案 3 :(得分:2)

是否有某些原因导致您无法让数据库生成(增加)ID?

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