我有这段代码:
$cmd = escapeshellcmd($_GET['command']);
$cmd2 = escapeshellcmd($_GET['command2']);
exec("program" . $cmd . $cmd2);
我想知道是否允许任何人以html格式使用它是否安全?
答案 0 :(得分:3)
否,不要让使用escapeshellcmd
或escapeshellarg
给您一种虚假的安全感。直接将值传递给命令行甚至转义而不进行任何形式的验证都会造成麻烦。
如果你坚持,我建议你阅读以下讨论:
What's the difference between escapeshellarg and escapeshellcmd?
答案 1 :(得分:0)
您需要将允许的命令列入白名单。
$cmd = escapeshellcmd($_GET['command']);
$cmd2 = escapeshellcmd($_GET['command2']);
$allowed_cmds = array('ls', 'foo', ...);
if(in_array($cmd, $allowed_cmds)) {
if(in_array($cmd2, $allowed_cmds)) {
exec("program" . $cmd . $cmd2);
}
}
就个人而言,你做错了什么。我已经编写了套接字系统,网站,数据库抽象,语言处理库,电子邮件服务器,正则表达式解析器以及其他东西。
我从来不需要讨厌的慢exec
。