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,这就是我作弊的原因。我