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

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

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

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

有帮助吗?

解决方案

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

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

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

其他提示

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

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

您必须授予写入权限,但您可以检查文件的 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 对象都有一个类型属性,您可以在写入文件之前检查该属性。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top