说,我有一个整数PK的客户。在我的网络应用中,我希望为他们提供个人资料页面。我不想要像/ profile / 10375 /这样的网址(例如,我不希望别人知道我有多少客户)。我也不想要像/ profile / acme_corp /.
这样的slug base url将唯一整数转换为唯一的随机短字符串有什么好方法? (例如,早期的Reddit曾经有过这种类型的url,但它是从十进制到基数36的转换,跳过一些id)。但这对我来说也没用,因为用这个方案很容易猜到数据库中的实体数量。
我无法使用UUID等,因为它们会使网址过大。
答案 0 :(得分:6)
如果主要关注的是一个客户可以查看另一个客户的页面,我将不依赖于您提出的方法。最终它是“通过晦涩安全”。相反,我会将页面显示与客户的身份验证凭据联系起来(假设您需要用户登录)。如果客户尝试访问他们自己以外的个人资料页面,他们会重定向到登录页面或给出访问授权错误消息。
实际上,您甚至不需要在URL中拥有customerID。只需使用/ profile /
即可答案 1 :(得分:2)
有一些哈希算法会产生短(8个字符,0-9a-f)输出字符串,例如adler32
或crc32
。您可以使用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)
也许你会将一对随机的字母对应每个数字......