的标准基本上是这样的:什么是生成短而唯一的文件/文件夹名称的好方法?
- 文件夹将约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