如果未启用预设,是否可以利用ImageResizer?

时间:2017-05-09 06:40:54

标签: imageresizer

我的项目使用Presets插件,标志onlyAllowPresets = true。

这样做的原因是关闭一个潜在的漏洞,其中脚本可能会请求图像数千次,以1px增量或类似的大小调整大小。

我的问题是:这是一个真正的漏洞吗?或者ImageResizer是否内置了某种保护功能?

我有点想将onlyAllowPresets设置为false,因为在这样一个大型项目中处理所有预设时会很痛苦。

1 个答案:

答案 0 :(得分:0)

我只知道发生过这种攻击的一个实例。如果您对目标有价值,我建议使用提供DDOS保护的防火墙(或CloudFlare)。

针对缓存未命中的攻击肯定会占用大量CPU,但它不会导致分页并破坏磁盘队列长度(位图在默认管道中被锁定到物理RAM)。缓存图像通常仍然具有合理的响应时间,因此影响通常是有限的。

那就是说,运行测试,假冒攻击,看看你的网络/存储/ CPU条件下会发生什么。我们一直在寻求改进攻击处理,因此来自更多环境的反馈非常好。

大多数应用程序或CMS将具有多个存储或CPU密集型端点(通常是通配符搜索)。并不是说这很好 - 它不是 - 而是经常在防火墙或CDN上处理这个问题的最具成本效益的层。而今天,大多数CMS都包含一些(通常是较差的)动态图像处理形式,因此请记住测试或禁用它。

请求签名

如果您的图片网址来自服务器端代码,则有一个干净的解决方案:在将网址吐出之前对网址进行签名,并在Config.Current.Pipeline.Rewrite event期间进行验证。我们计划在第4版中为这个运输安装一个插件,但它被推迟了 - 我们在过去5年中只有3个功能请求。

签名草图将是:

  1. 按键排序查询字符串
  2. 连接路径和对
  3. HMACSHA256带密钥的结果
  4. 追加到查询字符串的末尾。
  5. 验证:

    1. 解析查询
    2. 删除hmac
    3. 按以前的方式对查询和连接路径进行排序
    4. HMACSHA256结果并与我们删除的值进行比较。
    5. 如果出错则提出异常。
    6. 我们计划的实施将允许“白名单”变体 - 签名允许客户修改的某些值 - 例如基于断点的宽度值。这可以通过在签名之前用序列化白名单策略替换目标键/值对来完成。对于验证,在签名验证之前将删除策略所针对的对,并且如果签名是否匹配则将执行策略实施。

      也许您可以添加有关工作流程的更多详细信息以及可能的内容?