imgproxy快速安全的即时图像处理
imgproxy 是一个快速且安全的独立服务器,用于调整和转换远程图像的大小。imgproxy 的主要原则是简单、快速和安全。
imgproxy 可用于提供一种快速且安全的方式来替换你的 Web 应用程序的所有图像大小调整代码(如调用 ImageMagick 或 GraphicsMagick,或使用库),同时还能够快速轻松地调整所有内容的大小。imgproxy 在处理大量图像大小调整时也是必不可少的,尤其是当图像来自远程源时。
当你需要动态调整多个图像的大小以使其与你的应用程序设计匹配时,它非常有用,而无需准备大量缓存的调整大小的图像或每次设计更改时都重新执行。
imgproxy 是一个 Go 应用程序,可以在任何 Unix 环境中安装和使用 —— 也可以使用 Docker 进行容器化。
简单
imgproxy 仅包含图像处理、微调和安全性的必备功能。具体来说,
- 能够对图像进行旋转、翻转和应用蒙版会很棒,但在大多数情况下,使用 CSS3 可以——而且更容易——做到这一点。
- 内置某种类型的 HTTP 缓存可能很棒,但为此使用内容交付网络或缓存代理服务器会更好,因为您迟早必须在生产环境中执行此操作。
- 内置所有内容(例如 HTTPS 支持)可能很有用,但解决这个问题的简单方法就是使用代理 HTTP 服务器,例如 nginx。
速度
imgproxy 使用可能是最有效的图像处理库,称为 libvips
. 它运行速度快,内存占用非常低;有了它,我们可以即时处理大量图像。
imgproxy 还使用原生 Go 的net/http
路由来获得最佳的 HTTP 网络支持。
安全
在安全方面,大量处理远程图像是一件潜在的危险事情。攻击媒介有很多,因此最好先考虑攻击预防措施。以下是 imgproxy 如何提供帮助:
-
imgproxy在下载时会检查图像类型和“real”尺寸,因此如果图像格式未知或尺寸太大(有一个设置),则不会完全下载图像。这就是 imgproxy 如何保护你免受 https://www.bamsoftware.com/hacks/deflate.html 中描述的所谓“image bombs”的侵害 。
-
imgproxy 使用签名保护图像 URL,因此攻击者无法通过请求多个图像调整大小来引发拒绝服务攻击。
-
imgproxy 支持通过 HTTP 标头进行授权。这可以防止攻击者直接使用 imgproxy,但允许通过 CDN 或缓存服务器使用它——只需向代理或 CDN 配置添加标头即可。