我正在开发一个网络应用程序,用户将使用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对象方法。
答案 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");