2 个版本
0.1.1 | 2019年6月28日 |
---|---|
0.1.0 | 2018年10月31日 |
#224 in 多媒体
150KB
1.5K SLoC
quad-image
一个非常简单的图像托管API,以及支持文件。
构建
quad-image
可能仅在libc/Unix操作系统上工作。它需要Rust,稳定版应该没问题。
通过运行 cargo build --release
来构建,并从 target/release/quad-image
中获取二进制文件。
托管
预期的部署情况是
quad-image
在服务管理器下运行。- 由Web服务器提供服务的
web/
子目录 - Web服务器代理流量到
quad-image
。
在 quad-image.nginx
(用于nginx) 和 quad-image.service
(用于systemd) 中有示例配置文件。所有端口/地址都是硬编码的。
安全性
HTTP由Rouille处理,这是一个简单的Rust HTTP库。预计您将在 nginx
后运行API服务器,因此它甚至不需要处理TLS或任何HTTP怪异之处。
用户无法控制目标文件名。他们无法合理地覆盖服务器上的文件,或生成他们选择的URL。
在写入文件系统之前,使用Piston Image对图片进行解码和重新编码,应该没有方式可以提供非图像数据。也就是说,所有到达文件系统的文件都是有效的,最小图像,其中不包含任何额外信息,无论是在元数据中还是在文件的其他地方。
这可以防止
- 用户上传包含元数据中GPS位置的图片
- 提供其他图像库的漏洞利用
- 分发不属于图像的负载
- 配置不当的Web服务器尝试将上传的文件作为PHP执行
活塞图像库是一个Rust库,可能没有像libpng
、libjpeg
等库所有的内存损坏错误,几乎肯定没有imagemagick的convert
具有的所有疯狂的故障模式。
依赖项
~64MB
~1M SLoC