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

Can ImageResizer be exploited if presets are not enabled?

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

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

我的问题是:这是一个真正的漏洞吗?还是 ImageResizer 有某种内置的保护?

我有点想将onlyAllowPresets设置为false,因为在这么大的项目中处理所有预设是一件很痛苦的事情。

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

针对缓存未命中的攻击肯定会吃掉很多 CPU,但它不会导致分页并破坏您的磁盘队列长度(位图被锁定到默认管道中的物理 ram)。缓存图像通常仍会以合理的响应时间提供服务,因此影响通常是有限的。

就是说,运行 测试,假装攻击,看看在您的 network/storage/cpu 条件下会发生什么。我们一直在寻求改进攻击处理,因此来自更多环境的反馈非常好。

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

请求签名

如果您的图像 URL 源自服务器端代码,那么有一个干净的解决方案:在吐出之前对 URL 进行签名,并在 Config.Current.Pipeline.Rewrite event 期间进行验证。我们计划在 v4 中为这次发布提供一个插件,但它被推迟了——在过去的 5 年里我们只收到了大约 3 次关于该功能的请求。

签名草图为:

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

验证:

  1. 解析查询,
  2. 删除 hmac
  3. 像以前一样对查询和连接路径进行排序
  4. HMACSHA256 结果并与我们删除的值进行比较。
  5. 如果错误则引发异常。

我们计划的实施将允许 'whitelisted' 变化 - 签名允许客户端修改的某些值 - 例如基于断点的宽度值。这将通过在签名之前用序列化的白名单策略替换目标 key/value 对来完成。为了进行验证,策略所针对的对将在签名验证之前被删除,并且如果签名是匹配的,则将执行策略。

也许您可以添加更多关于您的工作流程的详细信息以及可能的情况?