我有一个公开的Web表单,具有文件上传功能.现在文件被保存在Web服务器上,或作为附件发送到电子邮件中.我们正在限制大小,即15MB和文件上传的扩展名.我们的SMTP服务器在同一个Web服务器上.我担心安全性,因为任何人都可以上传恶意文件,并可能影响我们的生产Web服务器.
通过这种文件上传控件可以让公众有什么风险?有没有人可以通过上传恶意文件在网络服务器上执行恶意脚本.
我做了一些研究,发现了以下几点
>如果我以电子邮件的形式发送文件作为附件,该文件将临时存储在ASP .Net文件夹中,一旦发送电子邮件将被删除.
>在将文件保存在文件系统之前,可以重命名文件.
>您可以将文件保存在不同的位置作为您的网站
>您可以进行某种实时病毒检查.我不知道你该怎么做我在读一些命令行病毒扫描.但不知道如果我真的需要这个.
解决方法
要回答有关可能的安全漏洞的问题,是的,即使不将文件保存到磁盘,您也可以在应用程序和用户中创建漏洞.但是,您可以采取几条防线来验证.
第一个是显然限制可以上传的文件类型,您可以使用白名单和扩展名检查,但不要停止.您还应该通过查看文件的内容来确认它是否符合预期的格式.这可能是至关重要的,因为一个坏家伙可以将文件头插入到上传的文件中,并将您的系统用作僵尸来传递恶意软件.
第二,您应该对上传的文件执行病毒扫描,您可以使用命令行执行本地病毒扫描程序.这是一个很容易的事情,包括趋势科技在内的许多病毒扫描,除非您正在查看大量的文件上传,否则在您的服务器上不应该是一个巨大的税.
确保您不会以用户提交的数据(通过GET或POST下载)传递路径,因为这可能会使您受到路径遍历攻击.如果您的用户需要从浏览器下载文件,您可以创建一个存储记录的数据库,然后创建一个控制器或页面,该控制器或页面将根据数据库记录和用户对该记录的访问权,而不是提供用户可以控制和使用从服务器获取文件的路径.
确保您将保存到的目录不能被Web服务器读取,这样他们不会上传恶意软件脚本,然后通过HTTP从浏览器执行它
确保您针对某些反XSS库验证所有用户输入(Microsoft提供一个http://www.microsoft.com/en-us/download/details.aspx?id=28589)
希望有帮助!