我有一个带有上传控件的ASP.NET表单,供用户发布图片。在服务器上,我加载该图像(使用Bitmap类)并调整其大小。
当用户上传恶意文件或受影响的文件时,是否存在任何危险,或者代码是否会在某个时刻抛出异常并停止整个过程?
答案 0 :(得分:1)
最好的黑客可能希望使用Buffer Overflow漏洞,然后他将恶意代码写入服务器内存。但是从我读过的内容来看,这种事情只有在使用不安全的代码时才会发生,而且由于Bitmap是完全托管的,所以我很确定使用它是安全的。
但是,真正聪明的黑客可以欺骗Bitmap并创建“自定义”图片文件,这将是完全有效的图片,但也会包含“hitchhiker”代码,这些代码可能会在浏览器中查看时使用某些未来的漏洞造成损害。最安全的方法是将Bitmap本身保存到磁盘而不是原始上传文件,这意味着使用bitmap.Save方法而不是HttpPostedFile的SaveAs方法。这样,任何额外的代码都将被省略,因为Bitmap不会加载它,访问者也是安全的。
顺便说一句,您可以将上传的文件存储在网站根文件夹之外,并创建“代理”文件以从文件夹中读取它:这样用户将无法直接浏览图像,他们将会必须使用代理文件。如果您在某些时候添加权限机制,这很有用,例如:用户A应该无法看到用户B上传的内容。
答案 1 :(得分:0)
我会:
确保上传的文件绝对是一张图片,以便人们无法上传任意内容 - 但您可能已经将其覆盖在Bitmap类中。
上传后重命名文件,以便有人上传不知道他们创建的文件名。
确保上传目录具有最低权限。
确保无法在浏览器中查看上传目录的内容。