当我调用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”,但仍然没有成功。有人有任何想法吗?

有帮助吗?

解决方案

您应该限制路径,含义:将其设置为满足某些要求的少数已知值(例如 $ENV{PATH} = '/sbin:/usr/sbin:/usr/bin';),不添加它。看 清理您的路perlsec 有关细节。

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

delete @ENV{qw(PATH ENV)};
system qw(/usr/bin/sudo /sbin/iptables -h);

其他提示

是的,在使用-t开关运行时,您对系统的依赖性不安全。 :p

您正在以污点模式运行脚本,并根据用户传递的信息调用外部程序(使用Sudo,不少)(可能会受到污染)。如果你是 真的 确保输出是有效的,并且不带风险,您需要取消任何风险:请参阅有关的官方文档 洗涤污染的数据.

你需要 真的 在运行外部程序或从CGI执行系统操作时要小心 - 例如,考虑输入时可能发生的情况 `rm -rf /` 作为用户输入。有很多信息 Perldoc Perlsec 为了让您入门,但也写了几本关于编写安全代码的书。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top