2009-08-18 131 views
7

我需要生成UUID最终存储在数据库中。我可以在客户端浏览器(There are some examples here)上使用JavaScript生成这些UUID吗?在JavaScript客户端中创建UUID是否有任何危险?

有没有做这种方式的任何安全风险?我知道任何人都可以在传递给服务器进行存储之前修改UUID。所以我需要检查它们在将它们存储到数据库之前是否是独特的,但除此之外,是否还有其他要检出的东西?

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

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

+0

我认为这可能是一个安全问题,让用户看到您的UUID生成器代码。理论上,可以生成例如其他用户会话ID等的现有UUID。 – 2014-06-10 09:16:03

回答

9

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

看看你的地址栏。我敢打赌,1296234是这个问题的主要关键,但我无法对这些信息做任何事情。与你的脚本相同。

+0

谢谢。我没有遇到任何可能发生的错误,但我想确定我没有忽视某种众所周知的攻击。 – 2009-08-18 23:17:08

3

你在产生这些客户端看到有什么好处?诚实地说,最好的选择是生成它在服务器端,在用户范围之外。它可能不会让您免于任何严重的安全问题,但会减少冗余验证。

+0

我知道这个线程是旧的,但如果您使用完全幂等创建REST调用,则需要在客户端上生成ID。另一种方法是向服务器查询新ID,然后在创建REST调用中使用该ID。但是,这意味着两次调用服务器。 – Alkaline 2015-02-17 23:21:19

+1

@Sampson我从未想过我必须在客户端生成UUID,但现在,我对离线Web应用程序感兴趣,并且在客户端生成UUID对于此用例来说非常完美! – Maxime 2016-06-18 19:28:39

+0

如果您遵循严格的CQS并且您需要回传ID(例如重定向到正确的视图),那么这是一个很好的方法。 – Shocked 2017-04-17 08:59:51

3

是有一些原因,你不能让数据库生成(增量)的ID?

如果像你说的,你必须提交反正它,为什么不只是有什么后台语言使用的是生成前检查的价值的唯一性。这会让它变得更加不透明。

+2

这里注意未来观众:停止依靠自动生成的ID。从数据库中解耦并使用UUID代替 – 2016-08-10 13:11:59

2

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

的风险可能包括,

  1. 会话盗用。如果您使用该ID来识别会话,则某人可能会使用现有ID作为生成的ID,并且如果未采取适当的谨慎措施,服务器可能会将其视为现有会话。

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

你可能会想办法抵御这些攻击,但这是被动保护。它可能会破坏在客户端生成ID的原始目的,这很简单。

+0

如果您确定了会话ID,那么您在任何网站上遭到黑客攻击..第1点不是有效的点。 – 2017-07-11 18:02:20

相关问题