如何在ASP.NET应用程序中使用图像大小调整来防止DOS攻击?

时间:2009-01-08 11:12:56

标签: asp.net

我目前正在开发一个用户可以上传图像以用作头像的网站,我知道这让我听起来有点偏执但我想知道如果恶意用户上传的图像具有令人难以置信的大尺寸会占用服务器内存(作为DOS攻击),我已经对可上传的文件大小有限制(250 k)但是如果图像例如是包含一种颜色的JPEG,即使是那么大小也可以允许具有令人难以置信的大尺寸的图像并以极低的质量设置创建。考虑到图像在调整大小(即未压缩)时作为位图在内存中上传,我想知道是否会发生这样的DOS攻击,甚至要检查它必须先在内存中保存的图像尺寸,你听说过吗?任何攻击利用这个?我太担心了吗?

4 个答案:

答案 0 :(得分:2)

维度应该能够在不将整个图像映射加载到内存中的情况下获得?也许您可以在wotsit.org了解有关此问题的更多信息。

答案 1 :(得分:2)

您必须验证图像文件确实是图像文件。问题不是对您的服务器的攻击。问题是有人上传ActiveX控件而不是图像。然后,此文件将下载并安装并破坏执行下载的每台Windows计算机。

威胁不在你身上。威胁是你将成为病毒的携带者。

您必须验证每个文件以确认 是真实的图像文件。如果需要,您可以检查尺寸和什么。大多数图像处理库都可以从图像中读取标题,检查尺寸和像素数以及什么不是。

通常情况下,人们会根据图像制作缩略图,一旦打开图像,就可以这样做。

答案 2 :(得分:1)

DoS可能是也可能不是问题 - 这取决于某人是否决定定位您的网站。

但是,为了使您的站点可以扩展到1000个并发用户,您可以考虑在单独的过程中处理图像处理。

当页面代码处理图像处理时,存在耗尽的风险:内存,CPU或ASP.NET线程---瓶颈取决于您的服务器配置。

可能的解决方案:

  1. 用户上传图片。
  2. 图像已保存到共享目录。
  3. 图像路径保存到数据库中的队列中。
  4. 页面返回消息“感谢上传,您的头像很快就会准备就绪”。
  5. Windows服务*定期唤醒并检查数据库队列。
  6. 服务调整队列中等待的所有图像的大小,将输出保存到共享目录,并将其从队列中删除。
  7. 服务更新数据库,指示用户的头像已准备就绪。因此,下次他们访问他们的个人资料页面时,会显示已调整大小的图像。
  8. *理想情况下,Windows服务在与Web服务器不同的服务器上运行,可以扩展以满足未来的需求。

    这项工作是否值得,取决于您的预期流量。您可以使用负载测试工具来编写脚本并模拟这些操作,以查看您的站点是否可以处理负载。

答案 3 :(得分:0)

我认为您应该只检查图像尺寸。只有几种格式,这并不难,您可以轻松地过滤掉大图像。通常,您可以上传头像的网站告诉您不仅要有比特定文件大小更小的图像,还要提供图像尺寸边框,所以通常会检查这个。