我的客户端代码生成UUID并将其发送到服务器。
例如,'6ea140caa83b485f9c98ebaacfb536ce'
是一个有效的uuid4,可以发送回服务器。
有没有办法检测或防止用户发送回一个有效但“用户生成”的uuid4,比如 'babebabebabe4abebabebabebabebabe'
?
例如,一种防止某些类型这类情况的方法是查看数字的二进制表示中0和1的出现次数。对于像 '00000000000040000000000000000000'
这样的字符串可能有效,但并非对所有字符串都有效。
回答:
这取决于具体情况…
没有办法完全确定,但根据你使用的UUID版本/子类型,可能会有方法检测到一些不规则的值:
https://www.rfc-editor.org/rfc/rfc4122#section-4.1 定义了UUID的原始版本1,并规定了uuid字段的布局…
你可以例如检查版本和变体字段是否有效…
如果你的UUID生成实际上使用了版本1,除了第一次检查版本和变体外,你还可以测试时间戳是否在有效范围内…例如,问题中的UUID不太可能是在1600年生成的…或者是未来的时间
所以可以应用这样的测试来检查该值是否实际有意义,或者完全是胡乱生成的…它不能防止有人思考:好的…让我们分析一下并提供一个手动选择的值来满足所有条件