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

$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 に答える
3

はい、-T スイッチを使用して実行している間、システムに安全でない依存関係があります。:p

taintperl モードでスクリプトを実行し、ユーザーから渡された情報 (汚染されている可能性があります) に基づくデータを使用して (sudo を使用して) 外部プログラムを呼び出しています。出力が有効であり、リスクがないと確信している場合は、汚染を除去する必要があります。汚染されたデータのロンダリングに関する公式ドキュメントを参照ください

外部プログラムを実行したり、CGI からシステム操作を実行したりするときは、十分に注意する必要があります。たとえば、`rm -rf /`ユーザー入力として入力するとどうなるかを考えてください。perldoc perlsecには、始めるための情報がたくさんありますが、安全なコードを書くことについて書かれた本もいくつかあります。

于 2010-10-12T02:36:43.340 に答える