2012-08-31 88 views
1

我正在創建一個允許用戶將pdf文檔上傳到私人區域的應用程序。可能要將所有文件上傳到/ uploads目錄。以安全的方式上傳文檔

是否有任何最佳實踐/建議,我可能會如何命名pdf,使得很難猜測其他可下載文檔的名稱。

我想知道如果原始文件名加上某種增量ID可能是要走的路?

如:

  • heresmydocument-0.pdf
  • youshouldntguessthis-次數1.pdf
  • howabouthisone-2.pdf

回答

2

原始名稱加上隨機ID。

R := random-integer; 
new-filename := original-filename + R; 

其中+表示串聯。

這基本上是你有同樣的想法,但我已經添加了觀察,如果你想在ID 難以猜測,然後使其嚴格遞增是一種愚蠢的。

如果您擔心rand()仍然是可以猜測的,那麼請使用SHA1(original-file-contents + R)而不僅僅是R。但這確實是過火。

編輯:其實,更好的辦法是使用R-original-filename.pdf,然後實現的功能,R-origi.pdf被視爲等同於R-original-filename.pdf。你會注意到很多新聞網站,包括Reddit,都使用這個習慣用法。它使分享網址更加方便,因爲您不必寫出http://www.reddit.com/r/programming/comments/z3ha1/how_did_you_know_so_much_about_computers_then_i/,而只需編寫http://www.reddit.com/r/programming/comments/z3ha1/。我建議你還要求用戶輸入原始文件名的前幾個字符,以防止隨意瀏覽;但當然你可以通過延長R幾個字符來獲得相同的好處。

+0

是的,如果我正在尋找安全性,遞增是愚蠢的! – DaveR

0

您可以使用的文件名與MD5哈希一個結束。我猜想這很難猜測。

1

如果您擁有數據庫後端,您可能希望在文件上傳時保留其中的詳細信息。然後將其命名的東西非常複雜

3058348113409780784350983450894350809.pdf

該文件,那麼你可以假定這將是相當困難的猜測。