2009-07-02 70 views
2

说,我有一个整数PK的客户。在我的网络应用程序中,我想为他们提供个人资料页面。我不想要像/ profile/10375 /这样的网址(例如,我不想让别人知道我有多少客户)。我也不想要像/ profile/acme_corp /这样的slu base网址。如何从整数中获得唯一的短字符串?

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

我不能使用UUID等,因为他们会使网址过大。

+0

如果你真的想这样做,你最好确保生成的字母组合最终不会等同于或非常类似于冒犯性词语。祝你好运! – 2009-07-02 18:51:16

+0

为了澄清,简介是公开的。 我想这样做的主要原因是, 1.因此,有人不能做下一个下一个查看所有配置文件,或使机器人太容易猜测所有的网址等。 2.保持客户数量成为公共信息。 – agiliq 2009-07-03 03:39:47

回答

2

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

哈希时添加盐,所以它更安全。

0

你可以随时base64然后url编码的ID。

在PHP

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

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

如果主要关注的是,一个客户可以看看其他客户的页面,我不会依赖于你所建议的方法。最终它是“通过默默无闻的安全”。相反,我会将页面的显示与客户的认证证书相关联(提供您需要您的用户登录)。如果客户试图访问不是他们自己的个人资料页面,他们会重定向到登录页面或给出访问授权错误消息。

事实上,你甚至不需要在URL中包含customerID。只需使用/资料/

+1

+1你说得对。这是正确的方法来做到这一点,只是/ profile/ – 2009-07-02 18:42:07

0

,也许你可以asociate随机对的字母每个数字的信件......

1

要做到这一点是创建查找表从一个映射的最简单和最安全的方式客户ID为唯一的随机字符串。

相关问题