C#の匿名メソッド(Action<>
、Func<>
)を使用したり渡したりするときに考慮する必要のあるセキュリティ上の意味は何ですか?匿名メソッド(Action <>、Func <>)をパラメータとして受け入れることに対するセキュリティの影響は何ですか?
Action<>
/Func<>
を受け入れる方法は、外部コードをプログラムに注入する可能性があるようです。記録のために、私は、注入されたメソッドや関数は、任意のメモリアクセスの意味で本質的に安全でないことを行うことができないことを理解していますが、私はそれが呼び出しコードを呼び出すことができると思います。任意の.Netフレームワーク機能、データの破損、またはアプリケーションの誤動作の原因となることがあります。
この仮説は間違っていますか?
そうでない場合は、これらをロックするために何を行う必要がありますか?さらに、メソッドまたは関数に渡され、期待される形式であることを確認したり、特定の型および名前空間へのアクセスを制限したりするために、
/Func<>
を検証する方法はありますか?
また、適切な用語を使用していないと、私はまだ学んでいます。
また、(仮想メソッドと抽象メソッドをオーバーライドして)継承とインターフェイスの実装によって悪質なコードを挿入できることにも注意してください。しかし、SLaksの答えはこれらのケースにも適用されます。例えば、 'System.String'クラスは、密封されることによって、このクラスから自分自身を保護します。 –
どのようなシナリオですか?信頼できるコードと信頼されていないコードを同じプロセスでCASで区切っていますか? – usr
@usr私は本当に懸念がある*シナリオがあるかどうか尋ねています。ここでは、これらのメソッドを使用して、プロパティゲッターやセッターを名前付きメソッドに渡す方法をいくつか見てきました。しかし、私が知る限り、指定されたメソッドが、渡されたAction <>またはFunc <>が予期された方法で動作することを保証したり、保証したりする方法がないため、これは間違っています。名前付きメソッドが本当に気にしない限り、これらをパラメーターとして使用するのは悪い習慣ですか?例えば。 Assert.ThrowsException()。 –