Aracılığıyla paylaş


CA2234: Dizeler yerine System.Uri nesneleri gönderin

TürAdı

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

Kategori

Microsoft.Usage

Bozan Değişiklik

Bozmayan

Sebep

Adında "uri", "Uri", "urn", "Urn", "url" veya "Url" içeren bir dize parametresi olan bir yönteme çağrı yapılır ve yöntemin tanımlanan türüne karşılık gelen bir yönteme Uri parametresi yüklenir.

Kural Tanımı

Parametre adı Camel Case kuralında simge temelli ayrılır ve daha sonra her simge "uri", "Uri", "urn", "Urn", "url" veya "Url" eşit olup olmadığını görmek için denetlenir.Bir eşleşme varsa, parametrenin bir Tekdüzen Kaynak Tanımlayıcısı (URI) temsil ettiği kabul edilir.Bir URI'nin dize halinde temsili, ayrıştırma ve hataları kodlama eğilimindedir ve güvenlik açıklarına yol açabilir.Uri sınıfı bu hizmetleri güvenli bir şekilde sağlar.Yalnızca bir URI gösterimi ile ilgili iki aşırı yüklemenin arasında seçim olduğunda, kullanıcı Uri parametresi alan aşırı yüklemeyi tercih etmelidir.

İhlallerin Düzeltilmesi

Bu kuralın bir ihlalini düzeltmek için, aşırı yüklemelerden Uri paremetresi alanı çağırın.

Uyarılar Ne Zaman Bastırılmalı

Dize parametresi bir URI'yi temsil etmiyorsa, bu kuraldan uyarıyı gizlemek güvenlidir.

Örnek

Aşağıdaki örnek bir yöntem gösterir, ErrorProne kural ve bir yöntem ihlali yapan, SaferWay, Uri aşırı yüklemesini doğru çağıran.

Imports System

Namespace DesignLibrary

   Class History

      Friend Sub AddToHistory(uriString As String)
      End Sub 

      Friend Sub AddToHistory(uriType As Uri)
      End Sub 

   End Class 

   Public Class Browser

      Dim uriHistory As New History()

      Sub ErrorProne()
         uriHistory.AddToHistory("https://www.adventure-works.com")
      End Sub 

      Sub SaferWay()
         Try 
            Dim newUri As New Uri("https://www.adventure-works.com")
            uriHistory.AddToHistory(newUri)
         Catch uriException As UriFormatException
         End Try 
      End Sub 

   End Class 

End Namespace
using System;

namespace DesignLibrary
{
   class History
   {
      internal void AddToHistory(string uriString) {}
      internal void AddToHistory(Uri uriType) {}
   }

   public class Browser
   {
      History uriHistory = new History();

      public void ErrorProne()
      {
         uriHistory.AddToHistory("https://www.adventure-works.com");
      }

      public void SaferWay()
      {
         try
         {
            Uri newUri = new Uri("https://www.adventure-works.com");
            uriHistory.AddToHistory(newUri);
         }
         catch(UriFormatException uriException) {}
      }
   }
}
#using <system.dll>
using namespace System;

namespace DesignLibrary
{
   ref class History
   {
   public:
      void AddToHistory(String^ uriString) {}
      void AddToHistory(Uri^ uriType) {}
   };

   public ref class Browser
   {
      History^ uriHistory;

   public:
      Browser()
      {
         uriHistory = gcnew History();
      }

      void ErrorProne()
      {
         uriHistory->AddToHistory("https://www.adventure-works.com");
      }

      void SaferWay()
      {
         try
         {
            Uri^ newUri = gcnew Uri("https://www.adventure-works.com");
            uriHistory->AddToHistory(newUri);
         }
         catch(UriFormatException^ uriException) {}
      }
   };
}

İlgili Kurallar

CA1057: Dize URI aşırı yüklemeleri System.Uri aşırı yüklemelerini çağırır

CA1056: URI özellikleri dizeler olmamalıdır

CA1054: URI parametreleri dizeler olmamalıdır

CA1055: URI dönüş değerleri dizeler olmamalıdır