【发布时间】:2012-12-01 15:06:23
【问题描述】:
有时,我会使用 exec()、shell_exec() 和 curl_exec()。以下是典型用途。假设我在其中有一个 PHP 变量(即第一个变量中的 $html),用户就有可能修改其内容。
从安全漏洞的角度来看,我应该关注什么? escapeshellcmd() 和 escapeshellarg() 是答案吗?如果是,应该在哪里使用?
$cmd='echo "html + '.$html.'" | htmldoc --format pdf > '.$filename;
$cmd='/usr/bin/convert '.$docs.' '.$filename;
$cmd='HOME='.$dir.'; /usr/bin/libreoffice3.5 --headless -convert-to pdf --outdir '.$dir.' '.$file_org;
$cmd='wget -O '.$file_org.' "'.$url.'"';
$cmd='/opt/wkhtmltopdf/bin/wkhtmltopdf "'.$url.'" '.$paramaters;
$cmd='/usr/bin/php -q '.$worker.' '.$session_id.' >/dev/null &';
exec($cmd);
$cmd='sendfax -n -m -w -i '.$id.' -o JohnDoe -D -S "hello@gmail.net" -s "us-leg" -f "'.$from.'" -d "'.$to.'" '.$doc_list;
$cmd = "faxstat -s | grep \"^$jid \"";
$output = shell_exec($cmd);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERAGENT, $_GET['user_agent'] ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'] );
curl_setopt($ch,CURLOPT_POSTFIELDS,array('aaa'=>$aaa,'bbb'=>$bbb));
$result = curl_exec($ch);
【问题讨论】:
-
在php代码中命名临时文件,不允许用户命名文件,不使用wget拉文件,使用libcurl,
-
使用 libcurl 代替 wget?
-
我想知道如果用户将
$html设置为"; rm -rf /; echo "foo"会发生什么。 -
@user1032531 你想知道什么?你不能使用 curl 下载文件?
-
@JonasWielicki。我尝试了以下方法,但没有创建目录。 $cmd="echo \"
你好; mkdir /tmp/测试/; echo \"foo\"
\" | htmldoc --format pdf > /tmp/new.pdf"
标签: php security shell curl shell-exec