我正在重写一个文件托管网站,我希望有能力托管每一种文件类型(而不仅仅是允许的白名单扩展名)。
我的服务器运行的是nginx和linux操作系统。网站使用php构建。我会禁用上传.php文件...但除此之外...还有其他需要注意的吗?
我的服务器运行的是nginx和linux操作系统。网站使用php构建。我会禁用上传.php文件...但除此之外...还有其他需要注意的吗?
以下是我们通常在 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
解决问题的更加简洁的方法是设置一个子主机(例如 files.somewhere.com)或目录,并通过 .htaccess 禁用执行权限(用户可以上传 PHP 脚本,但服务器将发送它而不是执行它)。
这里的最佳方式是结合以下几种措施:
.php
文件吗?你真的是指防止执行.php
文件吗? - In silico