如果上传的文件是有效的图片格式,.FromStream
即使包含病毒也不会抛出异常。也就是说,它没有病毒检查。
另一方面,病毒也无法激活,因为此时文件仅作为原始字节处理。
(如果不可行,它当然有可能包含直接针对 .NETImage
类的攻击,例如通过缓冲区溢出。但是,除了极不可能存在这样的漏洞之外,更不可能有人会去定位这样一个利基载体的麻烦)。
所以,在这一点上,你是完全(实际上)安全的,但你也不知道文件是否干净。
真正的问题是,这个文件之后会发生什么?
它是否保存到磁盘并在本地使用?
在这种情况下,您应该使用某种形式的防病毒检查它,如果只是为了您的利益 - 如果您相信它们,您可以让本地 AV 引擎扫描它。
是不是后来返回给其他用户,从而可以使用你的系统进行传播?
在保存文件之前,您绝对应该进行某种形式的 AV 扫描。请注意,这可能不是那么简单,因为您可能将图像存储在数据库中(在将其保存到文件之前,API 可以为内存段激活 AV 扫描仪)......无论如何,我我坚决反对直接在您的实际系统上运行防病毒扫描。你最好有某种形式的网关 AV 扫描仪,甚至在它到达你的系统之前。
但是,考虑到当您允许随机用户上传任意文件时,病毒清除并不是您最担心的问题。
- 一方面,您可能会被大文件或许多较小的文件淹没,从而对您的服务器进行 DoSing。
- 如果用户可以指定保存的文件路径 - 他可能会覆盖系统文件或上传可执行代码。
- 如果文件属性被保存并稍后显示(这包括文件名和用户名,还包括描述、文件类型、位置等) - 这可能导致其他标准 Web 攻击,例如 XSS 或 SQL 注入。
- 在此处搜索 GIFAR - 这些文件既是有效的图像文件,也是有效的 JAR(Java 存档 - 浏览器的可执行代码)文件。这些当然不是病毒……
- 根据系统的不同,如果您的用户上传受版权保护的图像或儿童色情等,您可能会面临法律损失的风险。当然,请咨询您的律师,因为我不是其中之一。
TL;博士
简而言之,接受任意上传确实会给您带来一团糟的潜在麻烦,而病毒扫描并不是最糟糕的。