我想创建一个验证码图片使用转换从ImageMagick。

我也这么做了,但是有一些问题。

在我的linux shell:

convert -background white -fill black -font FreeSerif-Bold -pointsize 36 label:'adfgh' ./test.png

错误是:

adfgh @ error/constitute.c/ReadImage/453 转换:缺少一个图像文件名。/test.png @ 错误/ convert.c / ConvertImageCommand / 3015

我的ImageMagick:版本:6.7.2-7,我安装它yum install ImageMagick。

我笨。有什么建议吗?


当前回答

注意:此解决方案和任何其他“编辑policy.xml”解决方案禁用针对ImageMagick中任意代码执行漏洞的安全措施。如果需要处理不能100%控制的输入,则应该使用不同的程序(而不是ImageMagick)。

如果您还在这里,您正在尝试编辑您完全控制、知道是安全的且用户无法编辑的图像。

yum安装了一个/etc/ imagemagick /policy.xml文件。它几乎不允许任何事情(为了安全性和保护您的系统不被ImageMagick调用重载)。

如果你得到一个ReadImage错误如上所述,你可以将行更改为:

<policy domain="coder" rights="read" pattern="LABEL" />

这应该能解决问题。

这个文件里面有很多文档,所以你应该读一下。例如,如果你需要更多的权限,你可以像这样组合它们:

<policy domain="coder" rights="read|write" pattern="LABEL" />

...这比删除所有权限检查(即删除或注释该行)更可取。

其他回答

我也有错误error/constitute.c/ReadImage/453时,试图转换eps与图像魔术gif。我尝试了sNICkerssss提出的解决方案,但仍然有错误(尽管与第一个不同)e error/ construct .c/ReadImage/412 解决这个问题的方法是将read放到其他条目中

 <policy domain="coder" rights="read" pattern="PS" />
 <policy domain="coder" rights="read" pattern="EPS" />
 <policy domain="coder" rights="read" pattern="PDF" />
 <policy domain="coder" rights="read" pattern="XPS" />
 <policy domain="coder" rights="read|write" pattern="LABEL" />

如果您不需要通过同一工具处理光栅文件和PDF/PS/EPS,请不要放松ImageMagick的安全性。

相反,保持你的web应用程序完整的防御深度,检查你的Ghostscript已经为所有已知的-dSAFER漏洞打了补丁,然后直接调用它。

gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf

-dSAFER opts you out of the legacy-compatibility "run Postscript will full permission to interact with the outside world as a turing-complete programming language" mode. -r300 sets the desired DPI to 300 (the default is 72) -sDEVICE specifies the output format (See the Devices section of the manual for other choices.) -o is a shorthand for -dBATCH -dNOPAUSE -sOutputFile= This section of the Ghostscript manual gives some example formats for for multi-file filename output but, for the actual syntax definition, it points you at the documentation for the C printf(3) function.

如果你渲染EPS文件,添加-dEPSCrop,这样它就不会填充你的输出到页面大小,并使用-sDEVICE=pngalpha来获得透明的背景。

如果有人需要在安装后用一个命令来完成,运行这个!

sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' /etc/ImageMagick-6/policy.xml

投票最高的答案(我没有足够的声誉在那里添加评论)建议注释掉MVG行,但请记住这一点:

CVE-2016-3714 ImageMagick supports ".svg/.mvg" files which means that attackers can craft code in a scripting language, e.g. MSL (Magick Scripting Language) and MVG (Magick Vector Graphics), upload it to a server disguised as an image file and force the software to run malicious commands on the server side as described above. For example adding the following commands in a file and uploading it to a webserver that uses a vulnerable ImageMagick version will result in running the command "ls -la" on the server. exploit.jpg: push graphic-context viewbox 0 0 640 480 fill 'url(https://website.com/image.png"|ls "-la)' pop graphic-context

And

任何低于7.0.1-2或6.9.4-0的版本都有潜在的漏洞 受影响的各方应尽快升级到最新版本 ImageMagick版本。

注意:这个和其他答案中的解决方案涉及禁用用于修复任意代码执行漏洞的安全措施。例如,请看这个与ghostscript相关的公告和这个与ubuntu相关的公告。只有当要转换的输入来自可信来源时,才使用这些解决方案。

我使用ImageMagick在php (v.7.1)切片PDF文件的图像。

首先,我得到了如下错误:

异常类型:ImagickException 异常信息:未授权.....@错误/ constitute.c / ReadImage / 412

在/etc/ imagemagick -6/policy.xml中进行了一些更改后,我开始得到如下错误:

异常类型:ImagickException 异常信息:无法创建临时文件.....@ error/pdf.c/ReadPDFImage/465拒绝权限

我的解决办法:

文件/etc/ imagemagick -6/policy.xml(或/etc/ imagemagick /policy.xml)

注释行 <!——<policy domain="coder" rights="none" pattern="MVG" />——> . 改变行 <policy domain="coder" rights="none" pattern="PDF" /> 来 <policy domain="coder" rights="read|write" pattern="PDF" /> 添加一行 <policy domain="coder" rights="read|write" pattern="LABEL" />

然后重新启动web服务器(nginx, apache)。