Php 这个exec()是安全的吗?

Php 这个exec()是安全的吗?,php,security,Php,Security,我有以下代码: $cmd = escapeshellcmd($_GET['command']); $cmd2 = escapeshellcmd($_GET['command2']); exec("program" . $cmd . $cmd2); 我想知道是否允许任何人在html表单中使用它是安全的?否,不要让使用escapeshellcmd或escapeshellarg给你一种虚假的安全感。将值直接传递到命令行即使是转义的也不需要任何形式的验证,这会带来麻烦 如果您坚持,我建议您阅读以下讨论

我有以下代码:

$cmd = escapeshellcmd($_GET['command']);
$cmd2 = escapeshellcmd($_GET['command2']);
exec("program" . $cmd . $cmd2);

我想知道是否允许任何人在html表单中使用它是安全的?

,不要让使用
escapeshellcmd
escapeshellarg
给你一种虚假的安全感。将值直接传递到命令行即使是转义的也不需要任何形式的验证,这会带来麻烦

如果您坚持,我建议您阅读以下讨论:


,不要让使用
escapeshellcmd
escapeshellarg
给你一种虚假的安全感。将值直接传递到命令行即使是转义的也不需要任何形式的验证,这会带来麻烦

如果您坚持,我建议您阅读以下讨论:


,不要让使用
escapeshellcmd
escapeshellarg
给你一种虚假的安全感。将值直接传递到命令行即使是转义的也不需要任何形式的验证,这会带来麻烦

如果您坚持,我建议您阅读以下讨论:


,不要让使用
escapeshellcmd
escapeshellarg
给你一种虚假的安全感。将值直接传递到命令行即使是转义的也不需要任何形式的验证,这会带来麻烦

如果您坚持,我建议您阅读以下讨论:


您需要将允许的命令列为白名单

$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

您需要将允许的命令列入白名单

$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

您需要将允许的命令列入白名单

$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

您需要将允许的命令列入白名单

$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

我们不知道
程序的功能。是不是一个工具不能对系统产生影响(imapsync)我对这一点了解得不够,但它似乎很不安全。我说
&&touch myprog.sh&&echo“我的程序代码”>>myprog.sh
?是因为我使用了escapeshellcmd(),您正在执行
“程序$cmd$cmd2”
,而不是
“程序$cmd$cmd2”
。如果你不得不问,那么它可能不安全。我们不知道
程序
的作用。是一个工具不能对系统产生影响(imapsync)我对此了解不够,但它似乎相当不安全。我说
&&touch myprog.sh&&echo“我的程序代码”>>myprog.sh
?是因为我使用了escapeshellcmd(),您正在执行
“程序$cmd$cmd2”
,而不是
“程序$cmd$cmd2”
。如果你不得不问,那么它可能不安全。我们不知道
程序
的作用。是一个工具不能对系统产生影响(imapsync)我对此了解不够,但它似乎相当不安全。我说
&&touch myprog.sh&&echo“我的程序代码”>>myprog.sh
?是因为我使用了escapeshellcmd(),您正在执行
“程序$cmd$cmd2”
,而不是
“程序$cmd$cmd2”
。如果你不得不问,那么它可能不安全。我们不知道
程序
的作用。是一个工具不能对系统产生影响(imapsync)我对此了解不够,但它似乎相当不安全。我说
&&touch myprog.sh&&echo“我的程序代码”>>myprog.sh
?是因为我使用了escapeshellcmd(),您正在执行
“程序$cmd$cmd2”
,而不是
“程序$cmd$cmd2”
。如果你不得不问,那么它可能是不安全的。+1对于严格的NO.OP,你应该总是明确地将参数列为白名单。好的,谢谢。你知道如何保护这部分代码吗?@skyice Benjamin刚刚告诉你:白名单是允许的arguments@skyice你应该阅读我发布的关于建议你也这样做的链接+1对于一个严格的NO.OP,你应该总是明确地列出白名单参数。好的,谢谢。你知道如何保护这部分代码吗?@skyice Benjamin刚刚告诉你:白名单是允许的arguments@skyice你应该阅读我发布的关于建议你也这样做的链接+1对于一个严格的NO.OP,你应该总是明确地列出白名单参数。好的,谢谢。你知道如何保护这部分代码吗?@skyice Benjamin刚刚告诉你:白名单是允许的arguments@skyice你应该阅读我发布的关于建议你也这样做的链接+1对于一个严格的NO.OP,你应该总是明确地列出白名单参数。好的,谢谢。你知道如何保护这部分代码吗?@skyice Benjamin刚刚告诉你:白名单是允许的arguments@skyice您应该阅读我发布的链接,以获得关于如何操作的建议。您可能打算使用
escapeshellarg
,您需要在exec中添加空格。很明显,您没有经常使用它。:)@DaniëlW.Crompton,这就是我作弊的原因。我只是复制了OP的代码并加入了条件。我吸取了教训。您可能打算使用
escapeshellarg
,需要在exec中添加空格。很明显,您没有经常使用它。:)@DaniëlW.Crompton,这就是我作弊的原因。我