我目前在 PHP 上使用 Imagick 库并使用 Image Magick 的调整大小功能。我刚刚了解了减压炸弹以及 ImageMagick 如何容易受到它的攻击。
我已经检查了如何在不实际将其加载到内存/磁盘中的情况下 ping 图像并验证图像的尺寸。限制 ImageMagick 的内存和磁盘限制也更安全,因此它不会只是在磁盘上写入一个大文件。
我已经阅读并且可以使用 setResourceLimit() 来做到这一点。 http://php.net/manual/en/imagick.setresourcelimit.php
IMagick::setResourceLimit(IMagick::RESOURCETYPE_MEMORY , 100);
IMagick::setResourceLimit(IMagick::RESOURCETYPE_DISK , 100);
$thumb = new Imagick('image.png');
$thumb->resizeImage(320,240,Imagick::FILTER_LANCZOS,1);
但是,发生的情况是,在设置磁盘和内存的限制后,如果图像确实达到了这个限制,我得到的只是一个分段错误,没有抛出异常。这使我无法正确处理它。
更新:
以下是我正在使用的软件包版本:
dpkg -l | grep magick
ii imagemagick-common 8:6.6.9.7-5ubuntu3.3 image manipulation programs -- infrastructure
ii libmagickcore4 8:6.6.9.7-5ubuntu3.3 low-level image manipulation library
ii libmagickwand4 8:6.6.9.7-5ubuntu3.3 image manipulation library
ii php5-imagick 3.1.0~rc1-1 ImageMagick module for php5