汚染モードでPerl CGIから /sbin /iptablesを呼び出すにはどうすればよいですか?
質問
「sudo /sbin /iptables ...」をperl cgiスクリプトで呼び出すと、エラーが発生します。
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'}に「/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
スクリプトをtainperlモードで実行し、ユーザーから渡された情報(汚染される可能性がある)に基づいてデータを使用して外部プログラム(Sudoを使用して)を呼び出します。もしあなたが〜なら 本当 出力が有効であり、リスクをもたらさないことを確認してください。 洗濯された汚染データ.
あなたはそうする必要があります 本当 外部プログラムを実行したり、CGIからシステム操作を実行したりする場合は注意してください。たとえば、入力した場合に何が起こるかを検討してください `rm -rf /`
ユーザー入力として。にたくさんの情報があります perldoc perlsec 開始するために、しかし、安全なコードを書くことについてもいくつかの本が書かれています。
所属していません StackOverflow