我正在编写一个网页界面,连接着我们公司使用的一款可怕的专有软件。这个软件没有真正的用户界面,需要我们授权客户端访问我们的系统才能获取数据。我的网页界面必须运行exec();
函数,并且必须传递一些用户输入的变量。
$command = "report-call '$type' '$study' '$server' '$tag' '$specopt1' '$specopt2' '$specopt3' '$specopt4'";
$last_line = exec($command, $output, $returnvalue);
现在我假设可以从变量$command
中删除任何分号来保证安全,但是我不确定,这就是为什么我在下个月上线之前在这里提出的原因。
最好的方法是如何对$command
进行净化? 我需要在变量中有一些特殊字符[ ] < > ! # $
。
escapeshellcmd()
实际上并没有转义'!',因此如果您在例如Bash中运行命令,则仍然容易受到命令替换的攻击(例如“this-is-a-test-!467”,其中“!467”将被您Shell历史记录中编号为467的任何内容所替换)。escapeshellarg()
可以缓解这种情况。 - madsen