代码之家  ›  专栏  ›  技术社区  ›  Gelin Luo

在污染模式下,如何从PerlCGI调用/sbin/iptables?

  •  0
  • Gelin Luo  · 技术社区  · 14 年前

    当我在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”,但仍然没有成功。有人知道吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   daxim e.dan    14 年前

    您应该限制路径,这意味着:将其设置为满足特定需求的少量已知值(例如 $ENV{PATH} = '/sbin:/usr/sbin:/usr/bin'; )不添加。见 Cleaning Up Your Path in perlsec 有关详细信息。

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

    delete @ENV{qw(PATH ENV)};
    system qw(/usr/bin/sudo /sbin/iptables -h);
    
        2
  •  3
  •   Ether    14 年前

    是的,在使用-t开关运行时,系统中存在不安全的依赖关系。P

    您在TaintPerl模式下运行脚本,并根据从用户传入的信息(可能受到污染)调用一个外部程序(至少使用sudo)。如果你是 真的? 确保输出有效且不构成风险,您需要将其取消标记:请参见有关 laundering tainted data .

    你需要 真的? 在运行外部程序或从CGI执行系统操作时要小心——例如,考虑如果输入 `rm -rf /` 作为用户输入。有很多信息在 perldoc perlsec 为了让您开始工作,还写了几本关于编写安全代码的书。