2009-07-02 72 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爲唯一的隨機字符串。

相關問題