CA2142: 透過的コードは、LinkDemand を使用して保護されてはならない
TypeName |
TransparentMethodsShouldNotBeProtectedWithLinkDemands |
CheckId |
CA2142 |
分類 |
Microsoft.Security |
互換性に影響する変更点 |
あり |
原因
透過的メソッドが、LinkDemand またはその他のセキュリティ確認要求を必要としています。
規則の説明
この規則は、アクセスするために LinkDemands を要求する透過的メソッドに対して適用されます。透過的セキュリティ コードでは、操作のセキュリティ検証を行うことができないため、アクセス許可を要求できません。透過的メソッドは、セキュリティに中立的であると見なされるため、セキュリティ上の決定を行うことができません。また、セキュリティ上の決定を行うセーフ クリティカルなコードでは、透過的なコードを使用して事前にそのような決定を行うことはできません。
違反の修正方法
この規則への違反を修正するには、透過的メソッドのリンク確認要求を削除するか、メソッドがセキュリティ確認要求などのセキュリティ チェックを実行する場合はメソッドに対して SecuritySafeCriticalAttribute 属性を設定します。
警告を抑制する状況
この規則による警告は抑制しないでください。
使用例
次の例では、メソッドが透過的であり、かつメソッドに対して LinkDemand を含む LinkDemand PermissionSet が設定されているため、メソッドにこの規則が適用されます。
using System;
using System.Security.Permissions;
namespace TransparencyWarningsDemo
{
public class TransparentMethodsProtectedWithLinkDemandsClass
{
// CA2142 violation - transparent code using a LinkDemand. This can be fixed by removing the LinkDemand
// from the method.
[PermissionSet(SecurityAction.LinkDemand, Unrestricted = true)]
public void TransparentMethod()
{
}
}
}
この規則による警告は抑制しないでください。