如何防止Perl中的系统命令执行任何shell命令?

时间:2010-10-11 20:57:18

标签: perl

如何防止Perl中的系统命令执行任何shell命令?

3 个答案:

答案 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的人的伤害。