避免利用文件中的perl变量外推

时间:2011-04-21 17:32:27

标签: perl

我通过在数据集和多个参数下运行来优化非常耗时/耗费内存的程序。对于每个“运行”,我有一个csv文件,“setup.csv”设置为“runNumber”,每次运行“命令”。然后我将其导入perl脚本以读取我想要的运行编号的命令,推断变量,然后通过系统命令在系统上执行它。我是否应该担心这种情况有可能被剥削,(我现在很担心)?如果是这样,我该怎么做才能保护我们的服务器?我现在的计划是将“setup.csv”的文件权限更改为只读,将所有权更改为root,然后在需要将另一个运行附加到列表时以root身份进入。 非常感谢您的宝贵时间。

2 个答案:

答案 0 :(得分:6)

使用-T以污点模式运行代码。这将迫使您仔细清洗数据。只传递你期望的字符串。不要使用.*进行清洗,而是检查好的字符串列表。

答案 1 :(得分:1)

理想情况下,有一个已知可接受值的列表,您可以对此进行验证。

无论哪种方式,您都希望使用system的多参数形式或使用IPC::System::Simplesystemx来避免使用shell。

如果无法避免shell,则必须正确转换文本以将命令传递给shell文字。

即使这样,您也必须小心以-开头的值。许多工具接受--来表示结束选项,允许其他值安全地传递。

最后,您可能希望确保args不包含NUL字符(\0)。

systemx('tool', '--', @args)

注意:在Windows中无法传递任意字符串。需要额外验证。