汚染モードでPerl CGIから /sbin /iptablesを呼び出すにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3911120

質問

「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 開始するために、しかし、安全なコードを書くことについてもいくつかの本が書かれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top