Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web applications 为用户上载的图像创建唯一文件名(哈希)_Web Applications_Amazon S3_Filenames - Fatal编程技术网

Web applications 为用户上载的图像创建唯一文件名(哈希)

Web applications 为用户上载的图像创建唯一文件名(哈希),web-applications,amazon-s3,filenames,Web Applications,Amazon S3,Filenames,我有一个允许用户上传图像的web应用程序。我将图像存储在S3存储桶中,并为它们提供所有文件名,这些文件名基本上是MD5(会话id+unix时间戳)的结果。此方法在创建唯一图像文件名时是否存在任何陷阱?从唯一性的角度来看,您应该是安全的。使用MD5时不太可能(尽管可能)发生冲突 但是,如果您想向用户提供这些文件的下载,我假设您将原始文件名存储在其他位置(数据库或类似位置)。是这样吗?如果这是正确的,你也可以将会话ID和时间戳存储在同一个地方,然后只需为文件名使用GUID(而不是将它们提供给MD5哈

我有一个允许用户上传图像的web应用程序。我将图像存储在S3存储桶中,并为它们提供所有文件名,这些文件名基本上是MD5(会话id+unix时间戳)的结果。此方法在创建唯一图像文件名时是否存在任何陷阱?

从唯一性的角度来看,您应该是安全的。使用MD5时不太可能(尽管可能)发生冲突


但是,如果您想向用户提供这些文件的下载,我假设您将原始文件名存储在其他位置(数据库或类似位置)。是这样吗?如果这是正确的,你也可以将会话ID和时间戳存储在同一个地方,然后只需为文件名使用GUID(而不是将它们提供给MD5哈希函数),这将从冲突的观点来看更安全。

< P>我会考虑用某种文件夹格式存储文件,如果一个文件夹中没有200000个文件,那么许多基于UI的S3客户端将工作得更好。另外,在上传的文件中添加正确的扩展名和mime类型也不会有什么坏处。这样,如果您决定直接从S3向web页面等提供服务,他们就可以开始了

2012/2/6GTBB88UYTGFRES4.png

您还可以将尺寸标注放在名称中


2012/2/6GTBB88UYTGFRES4_600x800_u200.png

您不会与MD5发生冲突。@TomAndersen真的吗?我不太确定。这是不可能的,我不认为MD5的大多数实际应用会受到碰撞的威胁,但它确实是可能的。它只在攻击情况下才可能发生,即使很困难。哈希空间的大小是无法想象的。为了防止冲突风险,请在hashgood point之后附加一个唯一的\u id,说明S3客户端无法在单个目录中处理大量文件。将子目录划分为不同的目录似乎是一种方法。如何让s3让您在上传时动态生成新目录?我找不到用于此的bucket策略。实际上没有目录,因此您只需将上载上的文件名设置为整个路径。为防止冲突风险,请在哈希后附加唯一的\u id