我創建了一個非常簡單的應用程序,允許(潛在員工)參考上傳自己的引用字母。下面是它如何工作的:生成隨機,單次使用URL
- 申請人提交引用電子郵件
- 參考接收包含獨特 URL(出於安全原因)
- 參考如下鏈接的自動生成的電子郵件,回答安全問題(在情況下,他希望訪問該網站一次以上)
- 上傳信
我卡在如何生成一個完滿成功(好吧,好吧,準會做)隨機的網址。更重要的是:我如何確保在鏈接之後將引用引導到正確的頁面?每次我發送一個隨機URL時,是否必須創建一個包含下拉框的新頁面?
感謝如何去這方面有任何建議:)
我創建了一個非常簡單的應用程序,允許(潛在員工)參考上傳自己的引用字母。下面是它如何工作的:生成隨機,單次使用URL
我卡在如何生成一個完滿成功(好吧,好吧,準會做)隨機的網址。更重要的是:我如何確保在鏈接之後將引用引導到正確的頁面?每次我發送一個隨機URL時,是否必須創建一個包含下拉框的新頁面?
感謝如何去這方面有任何建議:)
您可以嘗試使用hash算法生成從該文件的內容的唯一式的校驗和。通常(例如md5()
)原始內容中的一個字節更改會導致完全不同的散列。 (注: MD5有一些collision vulnerabilities)
如果存儲與哈希的文件名上傳的文件,你就可以在日後進行檢索,但對於更復雜的系統,應該有一個數據庫設置,它使隨機URL和存儲的內容之間的關係。
如果你不想湊,有代碼片段下面可以幫助生成隨機的網址(但要確保,如果一個URL已被使用,可以防止意外覆蓋):
md5(sha1(time() + rand(0, time())));
不錯,打我6秒+1 :) – Fluffeh 2012-08-08 13:06:58
原諒我,如果我錯了,但我不認爲這相當於回答這個問題 - 操作系統聲明,文件上傳*之後*他們給出一個隨機生成的URL,所以我不認爲他們可以散列該文件。他所需要的只是申請人和參考文獻之間的關聯,以確保文件上傳到正確的位置。 – jazzbassrob 2012-08-09 19:23:59
你可以根據當前時間戳或引用的唯一憑證的某種形式的散列(例如,用戶名或其他)創建一個唯一的字符串。然後,您可以爲Dropbox創建一個頁面,該頁面將接受URL中用於腳本的唯一字符串,該腳本將檢索數據庫中該字符串映射的相關數據。
我認爲,當你說你想要生成一個隨機的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在數據庫中查找它。這似乎,爲您的目的,迄今爲止最簡單的方法。
您還可以創建數字和字符的隨機排列,使
hash($previous) // is unique
的基本想法是,「hash'功能僅依賴於前值,創建一個新的獨特的價值。例如'0' - >'1','1' - >'2','9' - >'a','z' - >'10','z0' - >'11'。這樣的算法相對容易設計
使用隨機函數生成這些URL,並將它們存儲在數據庫中以確保人們重定向到更正URL。 – Vinay 2012-08-08 13:08:10
使用PHP的'uniqid'函數生成一個隨機的字母數字字符串。不需要散列隨機化的字符串。 – 2012-08-08 13:11:02
@Truth:使用uniqid,是否有辦法排除某些字符(例如)出現在隨機字符串中? – nv39 2012-08-08 13:33:32