CA2123: Geçersiz kılan bağlantı talepleri taban ile özdeş olmalıdır

TürAdı

OverrideLinkDemandsShouldBeIdenticalToBase

CheckId

CA2123

Kategori

Microsoft.Security

Bozan Değişiklik

Bozan

Sebep

Ortak tür içinde ortak ya da korunan bir yöntem bir yöntemi geçersiz kılar veya bir arabirimi uygular ve arabirim veya sanal bir yöntem olarak aynı Bağlantı Talepleri 'e sahip değildir.

Kural Tanımı

Bu kural, bir arabirim ya da başka bir türdeki sanal bir yöntem olan temel bir yöntem ile başka bir yöntemi eşleştirir, ve sonra herbir bağlantı talebini inceler.Bir ihlal yöntem veya temel yöntemden biri bir bağlantı talebine sahip ve diğeri değil ise bildirilir.

Eğer bu kural ihlal edilirse, kötü niyetli bir arayan, sadece güvensiz bir yöntem çağırarak bağlantı isteğini zar zor atlayabilir.

İhlallerin Düzeltilmesi

Bu kuralın bir ihlalini düzeltmek için aynı bağlantı isteğini yöntemi geçersiz kılmak veya uygulamak için uygulayın.Bu mümkün değilse, tam bir istekle yöntemi işaretleyin veya özniteliği tamamen kaldırabilirsiniz.

Uyarılar Ne Zaman Bastırılmalı

Bu kuraldan bir uyarı gizlemeyin.

Örnek

Aşağıdaki örnek, bu kuralın çeşitli ihlallerini gösterir.

using System.Security;
using System.Security.Permissions;
using System;

namespace SecurityRulesLibrary
{
   public interface ITestOverrides
   {  
      [EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted=true)]
      Object GetFormat(Type formatType);
   }

   public class OverridesAndSecurity : ITestOverrides
   {
      // Rule violation: The interface has security, and this implementation does not. 
      object ITestOverrides.GetFormat(Type formatType)
      {
         return (formatType == typeof(OverridesAndSecurity) ? this : null);
      }

      // These two methods are overridden by DerivedClass and DoublyDerivedClass.
      [EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted=true)]
      public virtual void DoSomething()
      {
         Console.WriteLine("Doing something.");
      }

      public virtual void DoSomethingElse()
      {
         Console.WriteLine("Doing some other thing.");
      }
   }

   public class DerivedClass : OverridesAndSecurity, ITestOverrides
   {
      //  Rule violation: The interface has security, and this implementation does not. 
      public object GetFormat(Type formatType)
      {
         return (formatType == typeof(OverridesAndSecurity) ? this : null);
      }

      // Rule violation: This does not have security, but the base class version does. 
      public override void DoSomething()
      {
         Console.WriteLine("Doing some derived thing.");
      }

      // Rule violation: This has security, but the base class version does not.
      [EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted=true)]
      public override void DoSomethingElse()
      {
         Console.WriteLine("Doing some other derived thing.");
      }
   }

   public class DoublyDerivedClass : DerivedClass
   {
      // The OverridesAndSecurity version of this method does not have security.  
      // Base class DerivedClass's version does.  
      // The DoublyDerivedClass version does not violate the rule, but the  
      // DerivedClass version does violate the rule. 
      public override void DoSomethingElse()
      {
         Console.WriteLine("Doing some other derived thing.");
      }
   }
}

Ayrıca bkz.

Kavramlar

Bağlantı Talepleri

Diğer Kaynaklar

Güvenli Kodlama Yönergeleri