我有一个页面,用户可以上传图像,稍后保存在服务器上。我正在通过检查其扩展名(.jpg,.png等)
对上传文件进行简单验证这样的验证是否足以满足服务器安全性?或者这是否有机会上传可能损害我的服务器的恶意代码?如果可以验证上传的图像,怎么做?
答案 0 :(得分:2)
每当最终用户在您的服务器上放置任何时,就有可能发生恶意行为。虽然双击.jpg图像不太可能会使你的盒子变硬,但已知有些奇怪的事情会发生。 (例如,谁知道PDF可能包含很多安全问题!)
您最好的选择是尝试实际加载图像并查看GDI +库是否将其识别为有效图像。如果没有获得运行时异常,那么您就知道图像是“有效的”。但是,如果在GDI +中加载图像,则不会保护您,但首先不会使您的盒子变硬。
您可以通过在单独的AppDomain中加载图像来进一步保护自己,但缩小潜在威胁。
答案 1 :(得分:1)
您通常可以使用urlmon.dll
来读取/检查文件的MIME类型。看到这个出色的答案here。
在您的服务器上安装好的防病毒程序也不是一个坏主意。启用实时文件系统扫描,当文件上传后一段时间内,它包含的内容很可能是恶意代码。
答案 2 :(得分:1)
通过验证,任何人都可以上传任何内容,只要他们为您提供所需的扩展程序即可。漏洞取决于你正在做什么。如果您重新为他们服务,接收他们的人可能会受到损害。用它们做一些恶意的事情需要一些创造力,但我的直觉说它可以做到。
这个答案(Validate image from file in C#)似乎对以编程方式实际验证图像有一些想法。