Share via


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

Ürün Değer
RuleId CA2123
Kategori Microsoft.Security
Hataya neden olan değişiklik Yeni

Neden

Ortak türdeki genel veya korumalı bir yöntem, bir yöntemi geçersiz kılar veya bir arabirim uygular ve arabirim veya sanal yöntemle aynı Bağlantı Talepleri'ne sahip değildir.

Dekont

Bu kural kullanım dışı bırakıldı. Daha fazla bilgi için bkz . Kullanım dışı kurallar.

Kural açıklaması

Bu kural, arabirim ya da başka bir türdeki sanal yöntem olan temel yöntem ile başka bir yöntemi eşleştirir ve sonra her bir bağlantı talebini inceler. Yöntemin veya temel yöntemin bağlantı talebi varsa ve diğeri yoksa bir ihlal bildirilir.

Bu kural ihlal edilirse, kötü amaçlı arayan yalnızca güvenli olmayan yöntemi çağırarak bağlantı talebini atlayabilir.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için geçersiz kılma yöntemine veya uygulamasına aynı bağlantı talebini uygulayın. Bu mümkün değilse, yöntemini tam taleple işaretleyin veya özniteliği tamamen kaldırın.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan uyarıyı bastırmayın.

Örnek

Aşağıdaki örnekte bu kuralın çeşitli ihlalleri gösterilmektedir.

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.