我正在编程一个文件转换器。因此,用户上传了一个文件,例如test.txt
随后将转换为转换器,并向用户发送下载链接。为了安全起见,我建议在文件上传后立即更改它们的名称,就像建议的here一样。
Instead create files and folders with randomly generated names like fg3754jk3h
下载问题开始。为了获得更好的用户体验,我希望可下载文件的名称与用户提供的文件的名称相同,而不是随机字符串。目前,我在Chrome中也遇到了错误:
<Filename> is an unusual download and may be harmful. [translated]
我认为这也可能是加密文件名的结果。
所以我的问题是:将文件名改回原始文件而又没有任何安全问题的最佳方法是什么?还是我应该对文件名进行严格验证?并且这将摆脱显示的错误消息吗?
答案 0 :(得分:0)
将文件返回给用户时,您可以提供原始文件名。 (有关几种操作方法,请参见Downloading a file with a different name to the stored name)
不使用原始名称存储文件的原则是避免恶意用户试图将一些脚本上载到他可以执行的服务器上。您应该这样做,但也应该将该文件放在Web服务器无法访问的临时目录中。
例如:
/var/www
/var/uploads
上而不是/var/www/uploads
上。这样,用户将永远无法访问该文件(至少可以从Web上访问)cute-cat.jpg
图片),保持文件扩展名没有问题。例如:kr3242sd93fdsh.jpg Content-Disposition
的{{1}}属性上定义了原始文件名。