我preg_replace类似 .php.jpg , .php.png , .js.jpg , .js.png ,出于安全目的,在上传文件(图片)的名称中,并想知道是否有任何扩展我应该在上传完成后将文件移动到相应的文件夹之前还要考虑更换?
答案 0 :(得分:3)
单独查看文件名实际上并不是防止恶意代码/可执行文件上传的安全方法。
根据您接受上传的文件类型,有更好的方法可以安全地播放。
作为一般规则,永远不要将任何文件上传到可从网络公开访问的任何地方,除非你知道100%它们并不是什么可疑的。
如果您允许图片上传 - 使用服务器端技术(如GD或ImageMagick)在使用之前重新保存文件。如果这些工具无法从已上载的内容中加载有效图像(捕获错误以便您知道......),请先删除或隔离文件,直到您手动调查为止。
在任何情况下,即使已更换/替换扩展名,也不要将文件存储在原始文件名下。
在网站上搜索上传安全性以获取更详细的提示 - 这个问题确实可以合理定期出现。
答案 1 :(得分:0)
根据您需要对文件执行的操作,可以加密或仅对文件运行gzip。在那里你节省了服务器上的空间,如果有人上传脚本文件,他们就无法通过http请求运行。我想要检查是否有来自提交的公共访问和/或设置htaccess文件。
答案 2 :(得分:0)
简短回答,是的还有许多其他可执行扩展,如果你要使用黑名单方法,你应该考虑阻止,如'phtml','java','perl','py','asp' ,'去'你应该考虑exe和bat以及其他可能传播恶意软件的人。
但是,如果你要完全阻止移动它们(或者甚至可能在你到达更复杂的部分之前作为一种表单验证上传),我只会使用黑名单,而不是你要上传和更改移动的名字。无论您不希望在服务器上使用某些未知的Java或Go或Python等,无论它是什么,即使您不在Apache上(它允许您将可执行扩展放在最后一段之外的地方)。为什么允许上传继续?它可以更简单(你会看到人们推荐)只是不允许3个级别的名称,但有三个级别名称的大量合法用途,如语言识别。然而,仅此方法不会使您免受可执行代码的影响。这需要成为更大的事情的一部分,以使文件上传尽可能安全(例如,您还需要检查图像文件的嵌入代码)。