如何防止Perl中的系统命令执行任何shell命令?
答案 0 :(得分:3)
如果您不希望system运行shell命令,请不要使用system
,因为这就是它的目的。
如果你所说的只是运行你想要运行的命令,那么有各种各样的方法。我在 Mastering Perl 的安全章节中讨论了其中的一些内容。但是,您必须澄清您要避免的问题。
答案 1 :(得分:2)
要求在路径中找到它们。路径上的可执行文件不是shell命令。
答案 2 :(得分:1)
您可以通过设置system
的别名来模拟CORE::GLOBAL::system
:
BEGIN {
*CORE::GLOBAL::system = \&mock_system;
}
sub mock_system {
my @cmd = @_;
if ("@cmd" eq "/bin/ls /tmp") {
return CORE::system(@cmd);
} else {
warn "You may only use 'system' to list the /tmp directory";
return 256;
}
}
但这并不能保护你免受明确调用CORE::system
的人的伤害。