現在、多数の外部ツールを実行するアプリケーションを構築しています。多くの場合、ユーザーがシステムに入力した情報をこれらのツールに渡す必要があります。
明らかに、これはセキュリティ上の大きな悪夢が待っています。
残念ながら、IDbCommand オブジェクトがデータベースに対して行うのと同じ種類のインジェクション攻撃に対する保護を提供しながら、コマンド ライン プログラムを実行する .NET Framework のクラスはまだ見つかっていません。
現在、非常に原始的な文字列置換を使用していますが、これはかなり不十分であると思われます。
protected virtual string Escape(string value) { return value .Replace(@"\", @"\\") .Replace(@"$", @"\$") .Replace(@"""", @"\""") .Replace("`", "'") ; }
コマンドライン インジェクション攻撃を防ぐために皆さんは何をしていますか? 非常に厳密で、文字のごく一部のサブセットのみを許可する正規表現を実装する予定ですが、もっと良い方法があるかどうか疑問に思っていました。
いくつかの説明:
- これらのツールの一部には、プログラミングできる API がありません。もしそうなら、私たちはこの問題を抱えていないでしょう.
- ユーザーは実行するツールを選択するのではなく、選択したツールが使用するメタデータを入力します (たとえば、著作権表示などのメタデータをターゲット ファイルに挿入します)。