perl -T
使いますか?Perl スクリプトのセキュリティ ホールを見つけるのに役立ちますか?
それ以上:)セキュリティの問題が1つになる前に停止します。もちろん、これはセキュリティの特効薬ではありません... 外部に公開されたスクリプト (つまり mod_perl アプリ) で (数年前、私が Perl プロジェクトに携わっていたとき) 使用していましたが、非常に便利であることがわかりました。をポリシーにしました。それはいくつかのチェックを行い、便利です..(何でも自動化されます)
Perl セキュリティ - perlsecも強く推奨しています:
このフラグ [汚染モード] は、サーバー プログラムや、CGI スクリプトなど、他の誰かに代わって実行されるプログラムに対して強く推奨されます。汚染モードがオンになると、スクリプトの残りの部分でオンになります。
確実に!
$ echo '`rm -rf /`' | perl -Te 'eval while <>' -e 行 1、<> 行 1 で -T スイッチを使用して実行すると、eval で安全でない依存関係が発生します。
Mastering Perlの「Secure Programming Techniques」の章は、汚染チェックとその使用方法にほぼ完全に専念しています。
多くの人はそれがあなたを守ってくれると言うでしょうが、彼らはそれについて巧妙に嘘をついています. これは、注意が必要なコード内のいくつかの (一部のみの) スポットを見つけるのに役立つ開発者ツールです。すべてのセキュリティ問題を解決できるわけではありません。
テイント モードは、誰もが慣れ親しんだ新しいコードが開発されているときに最適に機能すると思います。
誰かが書いた不十分なコードを汚染モードで実行した場合、perl は汚染規則によって「安全でない」操作を実行するのではなく、死んでしまいます。
汚染モードの perl では、いくつかの穴にパッチが当てられていますが、すべてではありません。system("$unfiltered_user_input") は終了しますが、Perl は $unfiltered_user_input データを固定名のファイルに書き込み (汚染されたデータの出力は「安全」と見なされるため)、system() でそのファイルを実行できます。しかし、すべてをチェックすることはできません。
レガシ アプリで使用するにはトレードオフがあります。Perl が汚染されたデータに対して安全でない操作を見つけた場合、それは終了します。つまり、アプリケーションが再び信頼できるようになる前に、誰かが入って、データの汚染を取り除くことの意味、必要な正規表現を決定する必要があります。
一部の人々は、安全ではなく、壊れていて、開発者を見つける必要があるよりも、安全ではなく、信頼性が高く、低コスト (今のところ) を好むでしょう。長期的には良いことではありません...しかし、それは珍しいことではありません。
はい、汚染モードは上記のすべての理由で役立ちます。
汚染されたデータとは考えられない 1 つの場所は、データベースとやり取りするときです。幸いなことに、DBI は、汚染されたデータがデータベースに入るのを阻止する機能をサポートしており、データベースからのデータを汚染されたものとして扱います。これには、具体的にオプションをオンにする必要があります。デフォルトではオフになっています。詳細については、DBI ドキュメントを参照してください。