关于PHP图像转换的安全问题

时间:2015-08-27 20:04:08

标签: php security svg imagemagick

在PHP中我正在创建一个svg文件,注入一些从表单发布的元素,使用ImageMagick将svg转换为jpg,然后最终销毁svg只留下jpg版本。一切都很完美。我担心的是安全性以及我可以/应该采取哪些措施来降低风险。

这是我的代码的内容......

//WRITE THE FILE CONTENTS INTO THE FILE
//If file already exists, it will replace it.
file_put_contents($file, $current);

//START CONVERSION PROCESS
$svg = file_get_contents($file);

$image = new Imagick();
$image->readImageBlob($svg);
$image->setCompression(Imagick::COMPRESSION_JPEG); 
$image->setCompressionQuality(60); 
$image->setImageFormat("jpg");
$image->writeImage($newFileName);
$image->clear();
$image->destroy();

//DESTROY SVG FILE 
unlink($file); 

我的恐惧是可以利用的东西插入我的svg。如果是这种情况,它会在图像转换中存活下来吗?我可能会采取哪些策略来使其更安全/尽可能安全。

1 个答案:

答案 0 :(得分:1)

SVG将以XML继承所有安全风险;像billion laughs& external entities为一对夫妇命名。虽然大多数SVG委托库已经解决了关键问题,但您仍然有责任防范XSS并清理用户输入。

  

如果是这种情况,它会在图像转换中存活吗?

通常不会,因为向光栅重新绘制矢量的过程会抛出原始数据。但是,针对停止读取SVG数据的攻击将持续存在。

  

我可能会采取哪些策略来使其更安全/尽可能安全。

  • 验证
  • 消毒
  • 强制执行SSL
  • 熟悉工作安全实践(例如PCI)和改编。