转换:未授权`aaaa` @ error / construct.c / ReadImage / 453

时间:2017-03-21 13:36:42

标签: imagemagick imagemagick-convert

我想使用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安装。

我很无能为力。有什么建议吗?

11 个答案:

答案 0 :(得分:362)

  

注意:此和其他解答中的解决方案涉及禁用安全措施,以解决任意代码执行漏洞。例如,参见this ghostscript-relatedthis 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)中

  1. 评论行

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
    
  2. 换行

    <policy domain="coder" rights="none" pattern="PDF" />
    

    <policy domain="coder" rights="read|write" pattern="PDF" />
    
  3. 添加行

    <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版本。

Source

答案 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=的简写
  • Ghostscript手册的
  • This section给出了一些用于多文件文件名输出的示例格式,但是对于实际的语法定义,它为您提供了C printf(3)函数的文档。

如果要渲染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" />