我想使用ImageMagick中的convert
来创建验证码。
我关注this,但有一些问题。
输入我的linux shell:
convert -background white -fill black -font FreeSerif-Bold -pointsize 36 label:'adfgh' ./test.png
错误是:
convert:未授权
adfgh
@ error / construct.c / ReadImage / 453。 转换:缺少图片文件名./test.png
@ 误差/ convert.c / ConvertImageCommand / 3015
我的ImageMagick:版本:6.7.2-7,我用yum install ImageMagick
安装。
我很无能为力。有什么建议吗?
答案 0 :(得分:362)
注意:此和其他解答中的解决方案涉及禁用安全措施,以解决任意代码执行漏洞。例如,参见this ghostscript-related和this ubuntu-related公告。仅当
convert
的输入来自受信任的来源时,才继续使用这些解决方案。
我在php(v.7.1)中使用ImageMagick将PDF文件切片为图像。
首先,我遇到类似以下错误:
异常类型:ImagickException
异常消息:未经授权..... @ error / 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)。
答案 1 :(得分:128)
我多次使用ImageMagic convert
命令将*.tif
文件转换为*.pdf
文件。
我不知道为什么,但是今天我开始收到以下错误:
convert: not authorized `a.pdf' @ error/constitute.c/WriteImage/1028.
发出命令后:
convert a.tif a.pdf
阅读以上答案后,我编辑了文件/etc/ImageMagick-6/policy.xml
并更改了这一行:
policy domain="coder" rights="none" pattern="PDF"
到
policy domain="coder" rights="read|write" pattern="PDF"
现在一切正常。
我有“ ImageMagick 6.8.9-9 Q16 x86_64 2018-09-28” 在“ Ubuntu 16.04.5 LTS”上。
答案 2 :(得分:50)
yum安装了/etc/ImageMagick/policy.xml
个文件。它几乎不允许任何事情(为了安全起见,保护你的系统免受ImageMagick调用的过载)。
如果您收到如上所述的ReadImage
错误,则可以将该行更改为:
<policy domain="coder" rights="read" pattern="LABEL" />
应解决问题。
该文件中包含大量文档,因此您应该阅读它。例如,如果您需要更多权限,可以将它们组合为:
<policy domain="coder" rights="read|write" pattern="LABEL" />
...最好删除所有权限检查(即删除或注释掉该行)。
答案 3 :(得分:22)
投票最高的答案(我没有足够的声誉在此处添加评论)建议对MVG行进行评论,但请牢记以下几点:
CVE-2016-3714
ImageMagick支持“ .svg / .mvg”文件,这意味着攻击者可以 使用脚本语言的工艺代码,例如MSL(Magick脚本 语言)和MVG(Magick矢量图形),将其上传到服务器 伪装成图像文件并强制软件恶意运行 如上所述,在服务器端执行命令。例如添加 在文件中执行以下命令,然后将其上传到使用 易受攻击的ImageMagick版本将导致运行命令 服务器上的“ ls -la”。
exploit.jpg:
推送图形上下文视图框0 0640480填充 'url(https://website.com/image.png“ | ls” -la)'弹出图形上下文
还有
低于7.0.1-2或6.9.4-0的任何版本都可能受到攻击,并且 受影响的各方应尽快升级到最新版本 ImageMagick版本。
答案 4 :(得分:20)
如果安装后有人需要用一个命令执行此操作,请运行此命令!
sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' /etc/ImageMagick-6/policy.xml
答案 5 :(得分:13)
在Ubuntu 16.04系统上进行了最新更新之后,当尝试在.ps文件上运行convert并将其转换为pdf时,我也开始收到此错误。
此修复程序对我有用:
在终端运行中:
sudo gedit /etc/ImageMagick-6/policy.xml
这应该在gedit文本编辑器中打开policy.xml文件。如果没有,则图像魔术可能会安装在其他位置。 然后更改
rights="none"
到
rights="read | write"
用于文件底部附近的PDF,EPS和PS行。保存并退出,然后图像魔术将再次起作用。
答案 6 :(得分:4)
只需删除/etc/ImageMagick/policy.xml文件。
答案 7 :(得分:4)
尝试将pdf转换为jpg并使用此方法解决它时出现此错误: 须藤vi /etc/ImageMagick*/policy.xml
更改:
policy domain =“ coder” rights =“ none” pattern =“ PDF”
收件人:
policy domain =“ coder” rights =“ read | write” pattern =“ PDF”
来源:http://realtechtalk.com/ImageMagick_Convert_PDF_Not_Authorized-2217-articles
答案 8 :(得分:2)
在阅读了一些建议并结合了思想之后,对我来说,需要在/etc/ImageMagick-6/policy.xml中进行以下更改:
<policy domain="coder" rights="read|write" pattern="PDF" />
... rights =“ none”没有帮助。 ... pattern =“ LABEL”并非必需。 尽管我不使用大的png文件(只有〜1 Mb),但是也需要更改内存限制:
<policy domain="resource" name="memory" value="2GiB"/>
(而不是256Mib)和
<policy domain="resource" name="area" value="2GB"/>
(而不是128 MB)
答案 9 :(得分:2)
如果您不需要通过同一工具处理光栅文件和PDF / PS / EPS,请不要放松ImageMagick的安全性。
相反,请保持您的Web应用程序完整的防御措施,检查Ghostscript是否已针对所有已知的-dSAFER
漏洞进行了修补,然后直接调用它。
gs -dSAFER -r300 -sDEVICE=png16m -o document-%03d.png document.pdf
-dSAFER
使您退出了具有遗留兼容性的“运行Postscript将获得完全许可,以图灵完整的编程语言与外界进行交互”。-r300
将所需的DPI设置为300(默认值为72)-sDEVICE
指定输出格式(其他选择请参见手册的Devices section。)-o
是-dBATCH -dNOPAUSE -sOutputFile=
的简写如果要渲染EPS文件,请添加-dEPSCrop
,以便它不会将输出填充到页面大小,并使用-sDEVICE=pngalpha
来获取透明背景。
答案 10 :(得分:0)
当尝试使用图像magick将eps转换为gif时,我也遇到错误error/constitute.c/ReadImage/453
。我尝试了sNICkersss提出的解决方案,但仍然有错误(尽管与第一个错误)e error/constitute.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" />