的標準基本上是這樣的:什麼是生成短而唯一的文件/文件夾名稱的好方法?
- 文件夾將約24-48hrs
- 文件夾名稱存在不能由用戶(如果在一個URL中使用)
- 文件夾名稱應該是短容易猜測的5-15個字符
最初的想法:
printf('%u',crc32(microtime(true)));
挪威當我上傳一個文件時,我基本上想保留上傳者指定的唯一的文件名,所以爲了避免任何命名衝突,我想把它放在一個唯一命名的目錄中......
的標準基本上是這樣的:什麼是生成短而唯一的文件/文件夾名稱的好方法?
最初的想法:
printf('%u',crc32(microtime(true)));
挪威當我上傳一個文件時,我基本上想保留上傳者指定的唯一的文件名,所以爲了避免任何命名衝突,我想把它放在一個唯一命名的目錄中......
[編輯]等一下。 PHP包含標準庫中的一個unique id generator function。也有other approaches。
語言不是在Ruby中,我會這樣做:
require 'digest/md5'
Digest::MD5.hexdigest(Time.now.to_s)
=> "f531384b3cc8c60b7c5b7ad087cb0ae4"
這聽起來像是一個「默默無聞的安全性」問題。我會建議反對任何可能產生潛在敏感數據並以一種安全的方式公開它(即使是很短的時間)的任何事情,只是因爲有人會猜測沒有人會猜測位置。存在蠻橫攻擊,他們可以撕開這種「安全」。
也許是發送一個臨時鏈接到一個特定的用戶,而其他人不能輕易猜到它 – Miquel 2009-04-30 22:29:00
使用的日期和時間,以產生名字
我會使用類似:
$salt='Whatever you want';
$folderName=SHA1($salt.date('U'));
日期(「U」)返回自Unix紀元(1970年1月1秒鐘00:00:00 GMT),所以它可能會是唯一的,除非你同時生成多個文件夾?
在這種情況下,只需巧妙地改變$ salt值(使其成爲用戶名或隨機數等)。
經典的技術看起來像
+ uploader-name
+ 20090401
+ 010000 // hhmmss
+ 013000 // hhmmss
+ 014500 // hhmmss
...
+ 20090402
添加關卡,並附加 「A」, 「B」, 「C」,...等基於所需的粒度。
這個作品尤其如此。以及如果用戶按時間順序涉及文件。
你最終做了一些存在的枚舉,但它並沒有那麼痛苦。我已經使用了很多次(包括使用PHP),主要是因爲用戶的抵抗力低於我找到的任何替代方案。
如果你願意的話,你可以美化日期表述 - 「2009-APR-01」,「上午01時45分」等
的時間立足散列(MD5或SHA)使它如果用戶粗略知道目錄何時生成,那麼可以猜測。他們所需要做的就是設置一個簡單的腳本來生成覆蓋幾秒鐘的所有可能性,然後點擊網站尋找響應。添加鹽雖然有幫助,但從長遠來看並沒有太大的好處。
對於OP,以上任何方法都是正確的。如果你運行一個非常快的服務器,你需要監視隨機目錄的命中。只有5個字母目錄意味着有人可以手動訪問該站點足夠多的時間來發現該目錄。 15雖然增加了一些,但是有一些機器以腳本的方式來完成它,但這不是沒有可能的。
C++標準具有函數tmpfile和tmpnum,都在cstdio(stdio.h)中,並相應地創建一個臨時文件和臨時文件名。 tmpfile在程序結束時被刪除。我會鏈接他們,但遺憾的是我現在還不能發佈鏈接。
有一個標籤... – SilentGhost 2009-04-30 22:28:10