0

当我在 Perl CGI 脚本中调用“sudo /sbin/iptables ...”时,出现错误:

Insecure dependency in system while running with -T switch at usr/lib/perl5/vendor_perl/5.8.8/IPC/Run3.pm line 403

我试图在 $ENV{'PATH'} 中添加“/sbin:/etc/sysconf:/etc/init.d”,但仍然没有成功。有人有什么想法吗?

4

2 回答 2

3

是的,在使用 -T 开关运行时,您在系统中存在不安全的依赖关系。:p

您正在 taintperl 模式下运行脚本,并使用基于从用户传入的信息(可能被污染)的数据调用外部程序(使用 sudo,不少于)。如果您确实确定输出是有效的并且不会造成风险,则需要对其进行清除:请参阅有关清洗受污染数据的官方文档。

在运行外部程序或从 CGI 执行系统操作时,您需要非常小心——例如,考虑如果您`rm -rf /`作为用户输入输入可能会发生什么。perldoc perlsec有很多信息可以帮助您入门,但也有几本书是关于编写安全代码的。

于 2010-10-12T02:36:43.340 回答
3

您应该限制路径,这意味着:将其设置为满足某些要求(例如)的少量已知值$ENV{PATH} = '/sbin:/usr/sbin:/usr/bin';,而不是添加到它。有关详细信息,请参阅清理您的路径perlsec

在您的简单情况下,最好完全清除它并仅依赖具有完全限定文件名的系统调用。

delete @ENV{qw(PATH ENV)};
system qw(/usr/bin/sudo /sbin/iptables -h);
于 2010-10-12T05:53:59.087 回答