如何保护用于让用户上传文件的文件夹?

时间:2008-08-22 14:38:15

标签: security iis asp-classic iis-6 windows-server-2003

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

为文件夹提供IUSR写权限是否足够安全?我必须保护其他东西吗? 我害怕黑客绕过ASP页面并将内容直接上传到文件夹。

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

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

4 个答案:

答案 0 :(得分:3)

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

在PHP世界中,情况更糟,因为攻击者可以上传恶意PHP脚本,然后通过网络服务器访问它。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.jpg")
'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对象都有一个您可以在写入文件之前检查的类型属性。

答案 3 :(得分:0)

最好的帮助可能是使用上传组件(我使用ASPUpload),允许您从无法从网站访问的文件夹上传/下载文件。

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