Как предотвратить системные команды в Perl от выполнения каких-либо команд оболочки? - PullRequest
1 голос
/ 12 октября 2010

Как запретить системной команде в Perl выполнять какие-либо команды оболочки?

Ответы [ 3 ]

3 голосов
/ 12 октября 2010

Если вы не хотите, чтобы system запускала команды оболочки, не используйте system, потому что это то, что нужно сделать.

Если вы говорите о запуске только тех команд, которые вы хотите выполнить, есть несколько способов обойти это. О некоторых из них я рассказываю в главе Mastering Perl по безопасности. Однако вам нужно будет уточнить, каких проблем вы пытаетесь избежать.

2 голосов
/ 12 октября 2010

Требуйте их найти на пути. Исполняемые файлы на пути не являются командами оболочки.

1 голос
/ 12 октября 2010

Вы можете смутить 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...