Udostępnij za pośrednictwem


CA5386: Unikaj trwałego kodowania wartości SecurityProtocolType

Właściwości Wartość
Identyfikator reguły CA5386
Tytuł Unikaj zapisywania na stałe wartości SecurityProtocolType
Kategoria Bezpieczeństwo
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Nie.
Zastosowane języki C# i Visual Basic

Przyczyna

Ta reguła jest uruchamiana po spełnieniu jednego z następujących warunków:

Bezpieczne wartości to:

  • Tls12
  • Tls13

Opis reguły

Protokół Transport Layer Security (TLS) zabezpiecza komunikację między komputerami, najczęściej w połączeniu z protokołem Hypertext Transfer Protocol Secure (HTTPS). Wersje protokołu TLS 1.0 i TLS 1.1 są przestarzałe, a protokoły TLS 1.2 i TLS 1.3 są aktualne. W przyszłości protokoły TLS 1.2 i TLS 1.3 mogą być przestarzałe. Aby upewnić się, że aplikacja pozostaje bezpieczna, należy unikać twardego kodowania wersji protokołu i wybrać jako cel co najmniej wersję 4.7.1 programu .NET Framework. Aby uzyskać więcej informacji, zobacz Najlepsze praktyki dotyczące Transport Layer Security (TLS) w .NET Framework.

Jak naprawić naruszenia

Nie koduj wersji protokołu TLS na stałe.

Kiedy pomijać ostrzeżenia

To ostrzeżenie można pominąć, jeśli aplikacja jest przeznaczona dla programu .NET Framework w wersji 4.6.2 lub starszej i może działać na komputerze z niezabezpieczonymi wartościami domyślnymi.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA5386
// The code that's violating the rule is on this line.
#pragma warning restore CA5386

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA5386.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady pseudokodu

Naruszenie nazwy wyliczenia

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

Naruszenie wartości całkowitej

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

Rozwiązanie

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

CA5364: Nie używaj przestarzałych protokołów zabezpieczeń

CA5397: Nie używaj przestarzałych wartości SslProtocols

CA5398: Unikaj zakodowanych na stałe wartości SslProtocols