2012-08-08 177 views
0

我創建了一個非常簡單的應用程序,允許(潛在員工)參考上傳自己的引用字母。下面是它如何工作的:生成隨機,單次使用URL

  • 申請人提交引用電子郵件
  • 參考接收包含獨特 URL(出於安全原因)
  • 參考如下鏈接的自動生成的電子郵件,回答安全問題(在情況下,他希望訪問該網站一次以上)
  • 上傳信

我卡在如何生成一個完滿成功(好吧,好吧,準會做)隨機的網址。更重要的是:我如何確保在鏈接之後將引用引導到正確的頁面?每次我發送一個隨機URL時,是否必須創建一個包含下拉框的新頁面?

感謝如何去這方面有任何建議:)

+1

使用隨機函數生成這些URL,並將它們存儲在數據庫中以確保人們重定向到更正URL。 – Vinay 2012-08-08 13:08:10

+1

使用PHP的'uniqid'函數生成一個隨機的字母數字字符串。不需要散列隨機化的字符串。 – 2012-08-08 13:11:02

+0

@Truth:使用uniqid,是否有辦法排除某些字符(例如)出現在隨機字符串中? – nv39 2012-08-08 13:33:32

回答

1

您可以嘗試使用hash算法生成從該文件的內容的唯一式的校驗和。通常(例如md5())原始內容中的一個字節更改會導致完全不同的散列。 (注: MD5有一些collision vulnerabilities

如果存儲與哈希的文件名上傳的文件,你就可以在日後進行檢索,但對於更復雜的系統,應該有一個數據庫設置,它使隨機URL和存儲的內容之間的關係。

如果你不想湊,有代碼片段下面可以幫助生成隨機的網址(但要確保,如果一個URL已被使用,可以防止意外覆蓋):

md5(sha1(time() + rand(0, time()))); 
+0

不錯,打我6秒+1 :) – Fluffeh 2012-08-08 13:06:58

+0

原諒我,如果我錯了,但我不認爲這相當於回答這個問題 - 操作系統聲明,文件上傳*之後*他們給出一個隨機生成的URL,所以我不認爲他們可以散列該文件。他所需要的只是申請人和參考文獻之間的關聯,以確保文件上傳到正確的位置。 – jazzbassrob 2012-08-09 19:23:59

0

你可以根據當前時間戳或引用的唯一憑證的某種形式的散列(例如,用戶名或其他)創建一個唯一的字符串。然後,您可以爲Dropbox創建一個頁面,該頁面將接受URL中用於腳本的唯一字符串,該腳本將檢索數據庫中該字符串映射的相關數據。

1

我認爲,當你說你想要生成一個隨機的URL,你實質上是要求產生一個隨機的字符串。這可能非常簡單;這裏的一些僞代碼:

for i = 1 to stringLength 
    randomString[i] = floor(random() * 26) + 'a' 
end 

換句話說,產生0和25之間的隨機數,並將其添加到的字符「A」的ASCII值。這會產生一個隨機的小寫字母串,我認爲這對你的任務應該足夠了。在PHP中,您可以使用rand函數。建議使用srand函數爲當前時間生成隨機數生成器,如給定鏈接末尾的示例。

至於第二部分;我建議你簡化一些事情;而不是生成一個帶有隨機URL的實際頁面,爲什麼不簡單地將一個隨機字符串傳遞到查詢字符串中,例如:

www.mydomain.com/uploadReference.php?id = xxxxxxx

其中xxxxxxx是你的隨機字符串。然後,您可以驗證該字符串並使用PHP在數據庫中查找它。這似乎,爲您的目的,迄今爲止最簡單的方法。

0

您還可以創建數字和字符的隨機排列,使

hash($previous) // is unique 

的基本想法是,「hash'功能僅依賴於前值,創建一個新的獨特的價值。例如'0' - >'1','1' - >'2','9' - >'a','z' - >'10','z0' - >'11'。這樣的算法相對容易設計