如何让Javascript客户端创建一个安全的UUID?

问题描述:

Javascript客户端可能创建一个不能伪造的UUID吗?如何让Javascript客户端创建一个安全的UUID?

例如,假设使用来自Create GUID/UUID in JavaScript?的解决方案之一来生成UUID并使用UUID向服务器发送创建请求。服务器可能检查UUID确实是由Javascript函数创建的,而不是由其他函数创建的?

一个想法是使用校验和,但UUID生成和校验和代码对于“黑客”是可见的。他们可以简单地修改Javascript函数,然后添加校验和。

那么,有没有什么好的解决方案来解决这个问题?

+0

听起来像是X:Y问题。为什么你关心UUID是否由Javascript函数创建,如果不是,会发生什么? – jgm 2014-09-25 20:53:45

+0

我不确定...这似乎很奇怪,随机UUID是在Javascript中生成的,但是黑客可以提交他们自己的UUID。看起来如果客户端要生成它,那么服务器需要一种方法来验证它是否正确生成。 – 2014-09-25 20:56:58

+0

这只是一个标识符,并没有特殊的权力或特权,所以为什么要担心? – jgm 2014-09-25 21:00:12

你不应该关心谁创建了UUID。服务器应该只检查客户端发送的UUID是否遵守UUID格式,或者检查是否已经使用了相同的UUID(这取决于您的需要)。

这是除非你的UUID值被用作秘密(例如激活号码)。在这种情况下,不应该在客户端生成该值,并且服务器应该跟踪它生成的值。

你可以做一些基本的健全性检查,如长度或格式,但你实际要求的是“给定一个数字,我可以检查它是由一个特定的随机数生成器生成的?”。如果随机数发生器是真正的随机数,那么答案必须是“否”,因为如果我可以从函数的答案中回溯,那么它很容易就不是非常随机的。