2011-02-07 138 views
3

我有一个页面,用户可以上传一张稍后保存在服务器上的图片。我通过检查其名(.jpg,.png等).NET中的图片上传验证

是这样的验证足够的服务器安全做上传文件的简单的验证?或者这是否让人有机会上传可能会损害我的服务器的恶意代码?如果可以验证上传的图像,如何完成?

回答

2

只要最终用户在服务器上放置了任何东西,就有可能导致恶意行为。尽管双击.jpg图像不太可能会让你的盒子满意,但已知陌生的事情会发生。 (例如,谁知道PDF文件可以包含如此多的安全问题!)

最好的办法是尝试实际加载的图像,看它是否在GDI +库,将其识别为一个有效的图像。如果你没有得到运行时异常,那么你知道图像是'有效的'。但是,如果在GDI +中加载图像并不会保护您的盒子,那么这不会保护您。

可以进一步在一个单独的AppDomain中加载图像保护自己,但缩小了潜在的威胁。

1

通常你可以读/检查MIME类型的文件,通过使用urlmon.dll。看到这个优秀的答案here

这也是个不错的主意,有在服务器上安装一个很好的防病毒程序。启用实时文件系统扫描,并在文件上传后立即包含最可能的恶意代码。

1

凭借该验证,任何人都可以,只要他们给它,你正在寻找扩展上传任何东西。漏洞取决于你在做什么。如果你重新服务他们,接收他们的人可能会受到损害。这需要一些创造力来对他们做一些恶意的事情,但我的直觉说可以做到。

这个答案(Validate image from file in C#)似乎有一些关于以编程方式实际验证图像的想法。