CA5386: Evitar codificar o valor SecurityProtocolType
Property | Valor |
---|---|
ID da regra | CA5386 |
Título | Evitar codificar o valor SecurityProtocolType |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Não |
Causa
Essa regra será acionada quando uma das seguintes condições for atendida:
- Um valor System.Net.SecurityProtocolType seguro, mas embutido em código, foi referenciado.
- Um valor inteiro que representa uma versão de protocolo seguro foi atribuído a uma variável SecurityProtocolType.
Os valores seguros são:
- Tls12
- Tls13
Descrição da regra
O TLS (Transport Layer Security) protege a comunicação entre computadores, mais comumente com o protocolo HTTPS. As versões do protocolo TLS 1.0 e TLS 1.1 são preteridas, enquanto o TLS 1.2 e o TLS 1.3 representam as atuais. No futuro, o TLS 1.2 e o TLS 1.3 poderão ser preteridos. Para garantir que seu aplicativo permaneça seguro, evite codificar uma versão de protocolo e tenha como alvo pelo menos o .NET Framework v4.7.1. Para mais informações, confira Práticas recomendadas do protocolo TLS (Armazenamento local de thread) com o .NET Framework.
Como corrigir violações
Não embutir versões de protocolo TLS em código.
Quando suprimir avisos
Você pode suprimir esse aviso se o aplicativo for direcionado .NET Framework v4.6.2 ou anterior e poderá ser executado em um computador que tenha padrões inseguros.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA5386
// The code that's violating the rule is on this line.
#pragma warning restore CA5386
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5386.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação de nome da enumeração
using System;
using System.Net;
public class ExampleClass
{
public void ExampleMethod()
{
// CA5386 violation
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
}
}
Imports System
Imports System.Net
Public Class TestClass
Public Sub ExampleMethod()
' CA5386 violation
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
End Sub
End Class
Violação do valor inteiro
using System;
using System.Net;
public class ExampleClass
{
public void ExampleMethod()
{
// CA5386 violation
ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072; // TLS 1.2
}
}
Imports System
Imports System.Net
Public Class TestClass
Public Sub ExampleMethod()
' CA5386 violation
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType) ' TLS 1.2
End Sub
End Class
Solução
using System;
using System.Net;
public class TestClass
{
public void TestMethod()
{
// Let the operating system decide what TLS protocol version to use.
// See https://learn.microsoft.com/dotnet/framework/network-programming/tls
}
}
Imports System
Imports System.Net
Public Class TestClass
Public Sub ExampleMethod()
' Let the operating system decide what TLS protocol version to use.
' See https://learn.microsoft.com/dotnet/framework/network-programming/tls
End Sub
End Class
Regras relacionadas
CA5364: Não use protocolos de segurança preteridos