某些内置函数如 system
和 exec
(以及反引号)将使用 shell(我认为默认情况下为 sh
)包含 shell 元字符的单个参数。如果我想编写一个避免对底层 shell 做出任何假设的可移植程序,是否有 pragma 或其他一些选项我可以用来禁用 shell 访问或立即触发 fatal error ?
最佳答案
我在 Mastering Perl 中广泛地写了这个.简短的回答是在列表形式中使用 system
。
system '/path/to/command', @args;
这不会解释 @args
中的任何特殊字符。
同时,您应该启用污点检查以帮助在将不良数据传递给系统之前将其捕获。查看perlsec有关详细信息的文档。
关于Perl 禁用 shell 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33725298/