如何防止Perl中的系统命令执行任何shell命令?
如何防止Perl中的系统命令执行任何shell命令?要求在路径中找到它们。路径上的可执行文件不是shell命令 要求在路径中找到它们。路径上的可执行文件不是shell命令 如果您不想运行shell命令,请不要使用如何防止Perl中的系统命令执行任何shell命令?,perl,Perl,如何防止Perl中的系统命令执行任何shell命令?要求在路径中找到它们。路径上的可执行文件不是shell命令 要求在路径中找到它们。路径上的可执行文件不是shell命令 如果您不想运行shell命令,请不要使用system,因为这就是它要做的 如果你说的是只运行你想运行的命令,那么有多种方法可以解决这个问题。我在掌握Perl的安全性一章中讨论了其中的一些。但是,您必须澄清您试图避免的问题。如果您不想运行shell命令,请不要使用system,因为这就是它要做的 如果你说的是只运行你想运行的命令
system
,因为这就是它要做的
如果你说的是只运行你想运行的命令,那么有多种方法可以解决这个问题。我在掌握Perl的安全性一章中讨论了其中的一些。但是,您必须澄清您试图避免的问题。如果您不想运行shell命令,请不要使用system
,因为这就是它要做的
如果你说的是只运行你想运行的命令,那么有多种方法可以解决这个问题。我在掌握Perl的安全性一章中讨论了其中的一些。但是,您必须澄清您试图避免的问题。您可以通过将别名设置为
CORE::GLOBAL::system
来模拟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
。您可以通过设置CORE::GLOBAL::system
的别名来模拟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;
}
}
这不会保护您不显式调用<代码>核心::系统< /代码>。
如果您的请求是关于安全性的,请务必考虑<代码> QX和<代码> Exc< /COD>。您可能会在中找到一些答案-虽然这解释了如何安全地调用系统
,而不是如何阻止某些东西调用系统
或阻止系统
做某些事情。您能更具体地说明您试图做什么吗?如果您问这个问题的目的是为了安全,请务必考虑<代码> QX和<代码> Exc< <代码>。您可以在中找到一些答案-尽管这解释了如何安全地调用系统
,不是如何阻止某些东西调用系统
或阻止系统
做某事。你能更具体地说明你想做什么吗?对不起,我的确切意思是我需要允许一些命令,但不是所有命令对不起,我的确切意思是我需要允许一些命令,但不是所有命令是,直到有人将shell脚本插入其中一个目录。仅仅要求它在路径中只是一个减速器。@brian,他没有提到为什么他不想运行shell命令,所以我不得不回到那里。我提出的原因之一是,shell命令可能在给定平台上失败,因为它们仅在shell中有效。也就是说,直到有人将shell脚本插入其中一个目录。仅仅要求它在路径中只是一个减速器。@brian,他没有提到为什么他不想运行shell命令,所以我不得不回到那里。我想到的一个原因是shell命令可能在给定平台上失败,因为它们只在shell中有效。