2014-06-29 42 views
0

我们正在考虑在我们的商业应用程序中使用ImageResizer,并且有一些与安全性有关的问题。该应用程序将允许用户上传图像以便随后在网页上显示。ImageResizer和安全考虑事项

我们想知道我们如何使用ImageResizer来抵御压缩炸弹,JAR内容,有效载荷,exif暴露和畸形图像数据等攻击。

我想我知道如何解决这些问题,但我想知道ImageResizer提供了哪些特定工具。

回答

2

大多数ImageResizer数据适配器都提供“untrustedData = true”配置设置。

该设置依次在ImageResizer.Configuration.Config.Current.Pipeline.PostRewrite事件期间在请求查询字符串中设置&process=always

如果您愿意,可以为所有图片请求进行设置。请记住,这会导致对原始图像的请求在潜在的质量损失和/或尺寸增加时被重新编码。

process=always被设置时,所有图像都被重新编码并且剥离exif数据以防止潜在恶意图像到达浏览器。这意味着客户端将得到500错误而不是格式错误的图像。但是,如何解读图像也同样重要。如果您允许用户上传以保留其原始文件名或只是扩展名(而不是从白名单中选择),则可以打开自己的攻击媒介。以同样的方式,如果图像被设置为JavaScript MIME类型的浏览器,客户端可以将其解释为JavaScript并获得XSS'd。 ImageResizer的管道与白名单一起工作,以防止这种情况发生。

另外,如果您打算对所有上传进行重新编码,则可能会更容易在上载阶段执行,而不是在每个请求上进行。但是,这依赖于数据存储的安全性,并确保没有“按原样”上传可以成功。

+0

我确实认为我想重新编码一次,上传。我不确定你的意思是“这依赖于你的数据存储的安全性,并确保没有'按原样'上传可以成功”我想我会尝试重新编码,依靠ImageResizer来让我知道是否有问题,例如无效的图像内容。理想情况下,如果发生这种情况,我会替换表示发生错误的库存图像。另外,你能解释白名单功能吗?什么是白名单? –

+0

1)也就是说,如果您接受公开推送至S3商店,则在通过应用服务器进行上传时,重新编码无关紧要。 2)如果您使用ImageResizer HttpModule,它将只为图像提供图像MIME类型。 –