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