应该避免在文件上传网站上使用的“坏”的文件扩展名是什么?

9
我正在重写一个文件托管网站,我希望有能力托管每一种文件类型(而不仅仅是允许的白名单扩展名)。
我的服务器运行的是nginx和linux操作系统。网站使用php构建。我会禁用上传.php文件...但除此之外...还有其他需要注意的吗?

你想拥有托管每种文件类型的能力,但是又希望禁止上传.php文件吗?你真的是指防止执行.php文件吗? - In silico
基本上,我不希望服务器执行任何恶意操作。 - user15063
3
如果坏人设法让您的服务器执行任意上传的文件 - 您认为他们将文件命名为除php以外的其他名称,这样做就可以阻止他们吗? - Martin Beckett
阻止某些文件类型肯定有助于网站或应用程序不被浏览器或杀毒软件列入黑名单。 - Sunny Sharma
3个回答

13

以下是我们通常在 php 文件上传系统上阻止的扩展名列表。

首先,最好将文件保存在不可访问的文件夹中,这样没有人可以运行上传的任何文件;其次,对每个文件进行强制下载,这样也无法打开文件。

扩展名列表: bat exe cmd sh php pl cgi 386 dll com torrent js app jar pif vb vbscript wsf asp cer csr jsp drv sys ade adp bas chm cpl crt csh fxp hlp hta inf ins isp jse htaccess htpasswd ksh lnk mdb mde mdt mdw msc msi msp mst ops pcd prg reg scr sct shb shs url vbe vbs wsc wsf wsh

此外,以下是上述内容的 JavaScript 正则表达式:

/(\.|\/)(bat|exe|cmd|sh|php([0-9])?|pl|cgi|386|dll|com|torrent|js|app|jar|pif|vb|vbscript|wsf|asp|cer|csr|jsp|drv|sys|ade|adp|bas|chm|cpl|crt|csh|fxp|hlp|hta|inf|ins|isp|jse|htaccess|htpasswd|ksh|lnk|mdb|mde|mdt|mdw|msc|msi|msp|mst|ops|pcd|prg|reg|scr|sct|shb|shs|url|vbe|vbs|wsc|wsf|wsh)$/i

也要添加php3、php4和php5。 - Joshua Ott
@JoshuaOtt 很少有人使用那些扩展名,不过你说得对。我会更新的。 - Neo

7

解决问题的更加简洁的方法是设置一个子主机(例如 files.somewhere.com)或目录,并通过 .htaccess 禁用执行权限(用户可以上传 PHP 脚本,但服务器将发送它而不是执行它)。


4

这里的最佳方式是结合以下几种措施:

  1. 禁用上传目录中的执行权限。
  2. 重命名所有可疑文件:PHP、SH、BIN等,或将所有文件压缩成ZIP/TAR文件存储。
  3. 在服务器上使用防病毒软件(如Dr. Web、ClamAV等),并定期扫描文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接