Partilhar via


CA2234: Passar objetos de System. URI em vez de seqüências de caracteres

TypeName

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

<strong>Categoria</strong>

Microsoft.Usage

Alteração significativa

Não separável

Causa

É feita uma chamada para um método que possui um parâmetro de seqüência de caracteres cujo nome contém "uri", "uri", "urn", "Urn", "url" ou "Url;" e o tipo declarativo do método contém uma sobrecarga de método correspondente que tem um System.Uri parâmetro.

Descrição da regra

Um nome de parâmetro é dividido em tokens com base na convenção camel casing e, em seguida, cada token é verificado para ver se igual a "uri", "uri", "urn", "Urn", "url" ou "Url". Se houver uma correspondência, presume-se que o parâmetro representam um identificador de recursos uniforme (URI). Uma representação de seqüência de caracteres de um URI está sujeita a análise e erros de codificação e pode levar a vulnerabilidades de segurança. O Uri classe fornece esses serviços em uma maneira segura e protegida. Quando há uma escolha entre duas sobrecargas que diferem somente em relação a representação de um URI, o usuário deve escolher a sobrecarga que utiliza um Uri argumento.

Como corrigir violações

Para corrigir uma violação desta regra, chame a sobrecarga que utiliza o Uri argumento.

Quando suprimir avisos

É seguro eliminar um aviso esta regra se o parâmetro de seqüência de caracteres não representa um URI.

Exemplo

O exemplo a seguir mostra um método, ErrorProne, que viola a regra e um método SaferWay, que chama corretamente o Uri sobrecarga.

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) {}
      }
   };
}

Regras relacionadas

CA1057: Sobrecargas URI de seqüência de caracteres chamada System. URI sobrecargas

CA1056: Propriedades URI não devem ser seqüências de caracteres

CA1054: Parâmetros da URI não devem ser seqüências de caracteres

CA1055: URI retornar valores não devem ser seqüências de caracteres