防止用户注入,通过命令行运行imagemagik

时间:2015-06-14 23:48:15

标签: php shell escaping imagemagick code-injection

我正在开发一个网络应用程序,用户将使用imagemagik提供将渲染到图像上的UTF8文本。我通过PHP的shell执行命令调用convert命令。

我不太熟悉用于命令行操作的用户输入(用于注入)的清理,并且无法找到有关我的确切情况的资源。

以下文章听起来好像我不必担心用户输入是否完全用bash命令中的引号括起来:

Sanitize user input in bash for security purposes

所以我的问题是,在以下用法中我需要担心用户的卫生/逃避

    <?php

    //GET USER SUPPLIED POST DATA
    $user_input = $_POST['text'];

    //CALL IMAGEMAGIK VIA COMMAND LINE TO RENDER IMAGE
    exec("convert -pointsize 50 -draw 'text 50,50 \"".$user_input."\" ' /source.png /output.png");
编辑:自发布以来我意识到我应该只是在php中运行imagemagick作为已安装的库...所以现在我想,同样的问题,但是使用php对象方法。

1 个答案:

答案 0 :(得分:0)

您始终可以将用户输入放入文本文件,然后使用@ filename前缀来读取它。这样它就不会成为命令行。

$user_input = addslashes($user_input);
file_put_contents("input.txt", "text 50,50 $user_input");
exec("convert -pointsize 50 -draw @input.txt /source.png /output.png");