Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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
Php 好奇-使用通用文件扩展名(如.tmp)保存用户上传的图像的利弊?_Php_Mysql - Fatal编程技术网

Php 好奇-使用通用文件扩展名(如.tmp)保存用户上传的图像的利弊?

Php 好奇-使用通用文件扩展名(如.tmp)保存用户上传的图像的利弊?,php,mysql,Php,Mysql,因此,当用户上载图像时,我将图像信息(如新名称、原始名称、大小和mime类型)保存在mysql数据库表中,并将图像存储在文件系统中,并且我使用公共文件扩展名(.tmp)重命名(唯一地)图像。 例如— nice_pic.jpg(用户上传)->0c14549a484.tmp(服务器文件系统中)。 现在,当我需要在DOM中添加图像时,我只需使用数据库中的原始扩展名再次重命名图像 例如-0c14549a484.tmp->0c14549a484.jpg 有人告诉我有安全优势。但不确定这种命名过程是否值得这

因此,当用户上载图像时,我将图像信息(如新名称、原始名称、大小和mime类型)保存在mysql数据库表中,并将图像存储在文件系统中,并且我使用公共文件扩展名(.tmp)重命名(唯一地)图像。 例如—

nice_pic.jpg(用户上传)->0c14549a484.tmp(服务器文件系统中)
。 现在,当我需要在DOM中添加图像时,我只需使用数据库中的原始扩展名再次重命名图像 例如-
0c14549a484.tmp->0c14549a484.jpg

有人告诉我有安全优势。但不确定这种命名过程是否值得这么做?想知道并解释一下。

缺点: 在我看来,这增加了很多额外的开销来保存数据,并且增加了哈希的长度(你不能用更短的文件名保存尽可能多的文件)

关于执行,如果您允许在服务器上运行上载的文件,您应该已经考虑使用沙盒执行环境(即Docker)来运行文件。在99.99%的情况下,无论文件扩展名如何,允许外部文件修改系统环境都是一个巨大的安全缺陷

此外,如果您运行的是像GoogleDrive这样的带有数千张照片的程序,那么这种处理会损失计算时间(尽管微不足道)

我想不出这种方法有什么值得注意的优点,所以我的建议是坚持使用行业标准的文件处理方法。

缺点: 在我看来,这增加了很多额外的开销来保存数据,并且增加了哈希的长度(你不能用更短的文件名保存尽可能多的文件)

关于执行,如果您允许在服务器上运行上载的文件,您应该已经考虑使用沙盒执行环境(即Docker)来运行文件。在99.99%的情况下,无论文件扩展名如何,允许外部文件修改系统环境都是一个巨大的安全缺陷

此外,如果您运行的是像GoogleDrive这样的带有数千张照片的程序,那么这种处理会损失计算时间(尽管微不足道)


我想不出这种方法有什么值得注意的优点,所以我的建议是坚持使用行业标准的文件处理方法。

他们声称这会给您带来什么好处呢?我想不出有什么特别有用的好处——如果有的话。这并不是说任何人都应该在服务器和tr上闲逛无法打开这些文件。如果它们只是图像而不是可执行文件,则无法运行它们。并且更改文件扩展名不会更改内容…因此,如果文件包含病毒,则在更改名称后仍会包含病毒。文件(包括图像)将临时上载到/tmp。然后,您应该
将上传的文件移动到一个合理的位置,并从该位置提供图像文件。这是否减少了意外执行任何类型的带有恶意扩展名的文件(如.exe)的机会?您认为谁将执行这些文件?同样,人们不应该戳到通常在服务器上循环。我不知道您的服务器O/S是什么,但在Unix/Linux环境中,文件扩展名与文件是否可执行完全无关。如果您不希望执行该文件,请在保存时不要对其设置可执行权限。只有Windows遵守.exe表示为exe的约定可剪切(尽管实际上其他文件类型也是可剪切的,并且从命令行可以执行任何内容,而不考虑扩展名)他们声称这会给你带来什么样的好处?我想不出有什么特别有用的好处——如果有的话。这不是说任何人都应该在服务器上翻找并试图打开这些文件。如果这些文件只是图像而不是可执行文件,那么他们就不能运行它们。更改文件扩展名并不会改变缺点帐篷…因此,如果文件包含病毒,在您更改名称后,它仍将包含病毒。文件(包括图像)将临时上载到/tmp。然后,您应该
将上传的文件移动到一个合理的位置,并从该位置提供图像文件。这是否减少了意外执行任何类型的带有恶意扩展名的文件(如.exe)的机会?您认为谁将执行这些文件?同样,人们不应该戳到通常在服务器上循环。我不知道您的服务器O/S是什么,但在Unix/Linux环境中,文件扩展名与文件是否可执行完全无关。如果您不希望执行该文件,请在保存时不要对其设置可执行权限。只有Windows遵守.exe表示为exe的约定可剪切(尽管实际上其他文件类型也是可剪切的,并且从命令行可以执行任何内容,而不考虑扩展名),感谢您解释@Simas。感谢您解释@Simas。