次の方法で共有


"Microsoft セキュリティ規則" コード分析規則セット

潜在的なセキュリティ上の問題の検出件数を最大化するために、"Microsoft セキュリティ規則" 規則セットを使用してください。

規則

説明

CA2116: APTCA メソッドは APTCA メソッドのみを呼び出すことができます

APTCA (AllowPartiallyTrustedCallers) 属性が完全に信頼されたアセンブリにあり、部分的に信頼された呼び出し元を許可しない別のアセンブリのコードをアセンブリが実行する場合、セキュリティ上の弱点になります。

CA2117: APTCA 型は APTCA 基本型のみを拡張することができます

APTCA (AllowPartiallyTrustedCallers) 属性が完全に信頼されたアセンブリにあり、アセンブリの型が部分的に信頼された呼び出し元を許可しない型から継承する場合、セキュリティ上の弱点になります。

CA2105: 配列フィールドは読み取り専用にできません

配列を含むフィールドに読み取り専用 (Visual Basic では ReadOnly) 修飾子を適用すると、そのフィールドで参照先の配列を変更できません。 ただし、読み取り専用フィールドに格納された配列の要素は変更できます。

CA2210: アセンブリには有効な厳密な名前が必要です

厳密な名前によって、改ざんされたアセンブリを、クライアントが無意識のうちに読み込む問題を防ぐことができます。 厳密な名前のないアセンブリが配置される状況は、限定されます。 適切に署名されていないアセンブリを共有または配布すると、アセンブリが改ざんされる場合、共通言語ランタイムでアセンブリを読み込むことができない場合、またはユーザーのコンピューターで検証を無効にする必要がある場合などの問題が考えられます。

CA2115: ネイティブ リソースを使用しているときには GC.KeepAlive を呼び出します

この規則では、アンマネージ コードでまだ使用されているのに、アンマネージ リソースが終了されたときに発生する可能性のあるエラーを検出します。

CA2102: 汎用ハンドラーの CLSCompliant でない例外をキャッチします

アセンブリ内の RuntimeCompatibilityAttribute でマークされていないメンバーまたは RuntimeCompatibility(WrapNonExceptionThrows = false) でマークされているメンバーには、System.Exception を処理する catch ブロックがあり、その直後に汎用 catch ブロックはありません。

CA2104: 読み取り専用の変更可能な参照型を宣言しません

外部から参照できる型に、変更可能な参照型である、外部から参照可能な読み取り専用のフィールドがあります。 変更可能な型とは、インスタンス データを変更できる型です。

CA2122: リンク確認要求で間接的にメソッドを公開しないでください

パブリック メンバーまたはプロテクト メンバーはリンク確認要求を含み、セキュリティ チェックを実行しないメンバーから呼び出されています。 リンク確認要求では、直接の呼び出し元のアクセス許可しかチェックされません。

CA2114: メソッドのセキュリティは型のスーパーセットにします

メソッドでは、同じアクションについて、メソッド レベルと型レベルの宣言セキュリティの両方を指定することはできません。

CA2123: オーバーライドのリンク確認要求は基本と同様にします

この規則は、メソッドをその基本メソッド (別の型のインターフェイスまたは仮想メソッド) とマッチングし、それぞれについてリンク確認要求を比較します。 この規則に違反すると、悪意のある呼び出し元が、保護されていないメソッドを呼び出すだけで、リンク確認要求を省略できます。

CA2111: ポインターは参照可能にすることはできません

ポインターがプライベート、内部、読み取り専用のいずれでもありません。 悪意のあるコードで、ポインターの値が変更される可能性があります。結果的に、メモリの任意の位置にアクセスされたり、アプリケーション エラーやシステム障害の原因になります。

CA2108: 値型での宣言セキュリティを確認します

パブリックまたはプロテクトの値型が、データ アクセスまたはリンク確認要求で保護されています。

CA2107: Deny と PermitOnly の用法を再確認します

PermitOnly メソッドと CodeAccessPermission.Deny セキュリティ アクションは、.NET Framework のセキュリティについて高度な知識を持っている場合にのみ使用してください。 コードにこのセキュリティ アクションを使用する場合、セキュリティを再確認する必要があります。

CA2103: 命令型のセキュリティを確認します

メソッドが強制セキュリティを使用しています。また、そのメソッドで、確認要求がアクティブな場合でも変更できるステータス情報または戻り値を使用して、アクセス許可を構築している可能性があります。 できる限り、宣言セキュリティを使用します。

CA2100: セキュリティの脆弱性について、SQL クエリを確認してください

メソッドに渡された文字列引数から構築された文字列を使用して System.Data.IDbCommand.CommandText プロパティが設定されています。 この規則では、文字列引数にユーザー入力が含まれていることが想定されています。 ユーザー入力から構築された SQL コマンド文字列には、SQL 注入攻撃に対する脆弱性があります。

CA2118: SuppressUnmanagedCodeSecurityAttribute の使用法を再確認します

COM 相互運用機能またはプラットフォーム呼び出し機能を使用するアンマネージ コードを実行するメンバーの場合、SuppressUnmanagedCodeSecurityAttribute によって、既定のセキュリティ システムの動作が変わります。 この属性は、主にパフォーマンスを向上するために使用されますが、パフォーマンスが向上するとセキュリティ上のリスクも高くなります。

CA2109: 表示するイベント ハンドラーを確認します

パブリックまたはプロテクトのイベント ハンドラー メソッドが検出されました。 イベント ハンドラー メソッドは、絶対に必要な場合を除き公開しないでください。

CA2119: プライベート インターフェイスを満たすメソッドをシールします

継承可能なパブリック型により、internal (Visual Basic では Friend) インターフェイスのオーバーライド可能なメソッド実装が提供されます。 この規則違反を修正するには、アセンブリの外側でメソッドがオーバーライドされないようにします。

CA2106: アサートをセキュリティで保護します

メソッドによってアクセス許可がアサートされますが、呼び出し元に対してセキュリティ チェックが実行されていません。 セキュリティ チェックを実行せずにセキュリティ アクセス許可をアサートすると、悪用される可能性があるセキュリティの弱点がコード内に残る場合があります。

CA2120: シリアル化コンストラクターをセキュリティで保護します

この型には、System.Runtime.Serialization.SerializationInfo オブジェクトおよび System.Runtime.Serialization.StreamingContext オブジェクトを使用するコンストラクター (シリアル化コンストラクターのシグネチャ) があります。 このコンストラクターはセキュリティ チェックで保護されていませんが、型に含まれる標準コンストラクターの 1 つ以上は保護されています。

CA2112: セキュリティで保護された型はフィールドを公開してはなりません

パブリック型またはプロテクト型に、パブリック フィールドが含まれ、リンク確認要求で保護されています。 リンク確認要求で保護されている型のインスタンスに対するアクセス権がコードにある場合、その型のフィールドにアクセスするためにリンク確認要求に適合する必要はありません。

CA2136: メンバーには、透過性注釈の競合があってはならない

完全に透過的なアセンブリにクリティカルなコードを含めることはできません。 この規則では、完全に透過的なアセンブリを分析し、型、フィールド、およびメソッドのレベルで注釈の SecurityCritical を検出します。

CA2147: 透過コードは、セキュリティ アサートを使用してはならない

この規則では、完全に透過的なアセンブリまたは透過的/クリティカル混在のアセンブリ内のすべてのメソッドと型を分析し、宣言的または強制的に使用されている Assert にフラグを設定します。

CA2140: 透過的コードは、セキュリティ上重要な項目を参照してはならない

SecurityTransparentAttribute でマークされたメソッドが、SecurityCritical とマークされたパブリックでないメンバーを呼び出しています。 この規則では、透過的/クリティカル混在のアセンブリ内のすべてのメソッドと型を分析し、透過的なコードからパブリックでないセキュリティ クリティカルなコードへの呼び出しのうち SecurityTreatAsSafe でマークされていないものにフラグが設定されます。

CA2121: 静的コンストラクターはプライベートでなければなりません

システムで静的コンストラクターが呼び出されてから、型の最初のインスタンスが作成されるか、静的メンバーが参照されます。 静的コンストラクターがプライベートである場合、システム以外のコードから呼び出すことができます。 コンストラクターで実行される操作によっては、これによって予期しない動作が発生することがあります。

CA2126: 型のリンク要求には継承要求が必要です

シールされていないパブリックな型がリンク確認要求によって保護され、オーバーライド可能なメソッドを持っています。 その型またはメソッドが継承確認要求によって保護されていません。

CA2124: 脆弱性のある finally 句の外側を try ブロックでラップします

パブリック メソッドまたはプロテクト メソッドに try/finally ブロックが含まれています。 この finally ブロックはセキュリティの状態をリセットすると思われますが、それ自体が finally ブロックで囲まれていません。