关于安全性:如何保护用于允许用户上传文件的文件夹?

关于安全性:如何保护用于允许用户上传文件的文件夹?

How do I secure a folder used to let users upload files?

我的Web服务器中有一个文件夹,供用户使用ASP页面上传照片。

给IUSR对该文件夹写权限是否足够安全? 我还必须确保其他东西吗?
我担心黑客会绕过ASP页面并将内容直接上传到该文件夹。

我在Windows 2003 Server上使用ASP Classic和IIS6。 上载是通过HTTP而不是FTP。

编辑:为清楚起见更改问题,并将我的答案更改为评论。


另外,我建议不要让用户上载到可从网络访问的文件夹中。即使是最好的MIME类型检测,也可能会失败,并且您绝对不希望用户在MIME嗅探失败的情况下上载伪装成jpeg的可执行文件,但IIS中的那个可以正常工作。

在PHP世界中,情况甚至更糟,因为攻击者可以上传恶意的PHP脚本,然后再通过Web服务器对其进行访问。

始终将上传的文件始终存储在文档根目录之外的目录中,并通过一些进行额外清理的访问脚本来访问它们(至少显式设置图像/任何MIME类型。


用户将如何上传照片?如果您正在编写一个ASP页面以接受上载的文件,则只有IIS运行身份的用户才需要对该文件夹进行写权限,因为IIS会执行文件I / O。您的ASP页应检查文件大小并进行某种形式的身份验证,以防止黑客填充硬盘驱动器。

如果要设置FTP服务器或其他文件传输方法,则答案将取决于您选择的方法。


最好的选择可能是使用一个上载组件(我使用过ASPUpload),该组件使您可以从无法从网站访问的文件夹中上载/下载文件。

您将获得一些身份验证挂钩,而不必担心有人随便浏览文件夹并下载文件(或在您的情况下上传),因为这些文件仅可通过组件获得。


您必须授予写权限,但是您可以检查文件的mime类型以确保图像。您可以这样使用FSO:

1
2
3
4
5
6
7
8
set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.webp")
'image mime types or image/jpeg or image/gif, so just check to see if"image" is instr
if instr(f.type,"image") = 0 then
   f.delete
end if
set f=nothing
set fs=nothing

此外,大多数上载COM对象都具有type属性,可以在写入文件之前对其进行检查。


推荐阅读