如何从整数中获取唯一的短字符串?

时间:2009-07-02 18:32:31

标签: database string

说,我有一个整数PK的客户。在我的网络应用中,我希望为他们提供个人资料页面。我不想要像/ profile / 10375 /这样的网址(例如,我不希望别人知道我有多少客户)。我也不想要像/ profile / acme_corp /.

这样的slug base url

将唯一整数转换为唯一的随机短字符串有什么好方法? (例如,早期的Reddit曾经有过这种类型的url,但它是从十进制到基数36的转换,跳过一些id)。但这对我来说也没用,因为用这个方案很容易猜到数据库中的实体数量。

我无法使用UUID等,因为它们会使网址过大。

5 个答案:

答案 0 :(得分:6)

如果主要关注的是一个客户可以查看另一个客户的页面,我将不依赖于您提出的方法。最终它是“通过晦涩安全”。相反,我会将页面显示与客户的身份验证凭据联系起来(假设您需要用户登录)。如果客户尝试访问他们自己以外的个人资料页面,他们会重定向到登录页面或给出访问授权错误消息。

实际上,您甚至不需要在URL中拥有customerID。只需使用/ profile /

即可

答案 1 :(得分:2)

有一些哈希算法会产生短(8个字符,0-9a-f)输出字符串,例如adler32crc32。您可以使用PHP function hash()生成它们(有关可用算法的列表,请参阅hash_algos()),但我不确定您的数据库引擎本身是否可以处理它。如果是这种情况,生成随机slu is将是一个更好的解决方案。

在散列时添加盐,因此更安全。

答案 2 :(得分:1)

最简单,最安全的方法是创建一个查询表,其中包含从客户ID到唯一随机字符串的映射。

答案 3 :(得分:0)

你总是可以使用base64然后对你的id进行url编码。

在php中:

urlencode (base64_encode("1234"))
> MTIzNA%3D%3D

base64_decode(urldecode("MTIzNA%3D%3D"))
> 1234

答案 4 :(得分:0)

也许你会将一对随机的字母对应每个数字......