0

私は FxCop CA2122 メッセージを理解しようとしています (おそらく、惨めなものを無効にする前に) .NET CAS の理解を明らかに超えています。

アプリケーションは .EXE であり、AllowPartiallyTrustedCallers でマークされていません。コード分​​析から CA2122 警告が表示され、最下位レベルの呼び出しから、それ自体が LinkDemands を持つメソッドへの LinkDemands を上方に伝播できなかったことについて不平を言っています。

明らかに、呼び出し元に LinkDemands を配置し、次に呼び出し元の呼び出し元を無限に配置することができます。このコードのすべての呼び出しは常に完全に信頼されるため、(AIUI) すべてのリンク要求は常に満たされるため、これはまったく無意味に思えます。Eric Lippert も、それを行うのは非常に危険だと考えているようです。

そう:

  • 「このコードは完全信頼でのみ実行される」と言うために欠落しているアセンブリレベルの属性は何ですか? (AllowPartiallyTrustedCallers がないことはこれを暗示していると思いましたが、おそらく .EXE の場合はそうではありません)

  • それとも、その CA 警告をオフにして先に進むべきですか? それらを無効にする前に、それらを正しく理解するのが好きです...

更新: 使用しているフレームワークのバージョンを尋ねられました.2.0RTM であり、XPe プラットフォーム上にあるため、それ以降のアップグレードは非常に困難です。

4

2 に答える 2

2

アセンブリが完全に信頼された実行可能ファイルとしてのみ実行されるという根本的な仮定には誤りがあります。あなたのアセンブリを手に入れた誰かが、それをマルウェアの一部の参照ライブラリ アセンブリとして使用することを止めるものは何もありません。コンピューターの CAS ポリシーを変更して、展開方法に関係なく、アセンブリに完全な信頼を付与した場合、マルウェアはアセンブリを使用して、他の方法では適切なアクセス許可を持たない操作を実行できる可能性があります。

この結論は、意図した展開シナリオに関係なく、呼び出しコードに代わってリンク要求を満たすことを防ぐために何かをする必要があるということです。自分で完全な信頼シナリオをターゲットにしていることを考えると、これは実際には非常に簡単になります。 ただし、正確なアプローチは、対象とする .NET Framework のバージョンに大きく依存するため、その詳細を投稿していただけますか?

.NET 2.0 の場合、この問題に対処する最も簡単な方法は、SecurityTransparentAttribute または SecurityCriticalAttribute をアセンブリに適用することです。両方の属性により、アセンブリ内のコードが既定でセキュリティ透過的になります。つまり、呼び出し元に代わってリンク要求を満たすようなことはできません。セキュリティ透過的なコードに許可されていないことを行う必要があるコードの部分がある場合は、アセンブリ レベルで SecurityTransparentAttribute の代わりに SecurityCriticalAttribute を使用する必要があります。これにより、型やメンバーを明示的にセキュリティに昇格させることができます。彼らがそれを必要とする場合、重要性。(もう少し詳しくは、リンクを参照してください。)

于 2010-11-05T13:04:11.450 に答える
1

これを正しく理解している場合: http://msdn.microsoft.com/en-us/library/system.security.allowpartiallytrustedcallersattribute.aspx

リンク デマンド属性は、メソッドに完全な信頼規則を適用するように .NET に指示します。これにも厳密な名前が必要です。アプリ ツリーが完全に信頼できる環境にある場合でも、パブリック/保護されたメソッドとクラスにルールを適用するものは何もありません。

AllowPartiallyTrustedCallers は、誰が呼び出してもかまわないことを .NET に伝えます。

.NET 4 でセキュリティ モデルが変更されたようです。

于 2010-11-03T20:40:09.460 に答える