CA5386: избегайте жесткого кодирования значения SecurityProtocolType
Свойство | Значение |
---|---|
Идентификатор правила | CA5386 |
Заголовок | Не встраивайте значение SecurityProtocolType |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Это правило возникает при выполнении любого из следующих условий:
- Было указано надежное, но жестко заданное значение System.Net.SecurityProtocolType.
- Переменной SecurityProtocolType было присвоено целочисленное значение, представляющее версию безопасного протокола.
Безопасными являются следующие значения:
- Tls12
- Tls13
Описание правила
Протокол TLS обеспечивает безопасность взаимодействия между компьютерами, чаще всего с помощью протокола HTTPS. Протоколы версии TLS 1.0 и TLS 1.1 являются устаревшими, а TLS 1.2 и TLS 1.3 являются актуальными. В будущем протоколы TLS 1.2 и TLS 1.3 могут быть отмечены как нерекомендуемые. Чтобы обеспечить безопасность приложения, не следует жестко задавать версию протокола, и рекомендуется использовать по крайней мере .NET Framework версии 4.7.1. Дополнительные сведения см. в разделе Рекомендации по использованию протокола TLS с .NET Framework.
Устранение нарушений
Не следует жестко задавать версии протокола TLS.
Когда лучше отключить предупреждения
Вывод предупреждения можно отключить, если приложение предназначено для .NET Framework версии 4.6.2 или более ранней версии и может выполняться на компьютере с небезопасными настройками по умолчанию.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA5386
// The code that's violating the rule is on this line.
#pragma warning restore CA5386
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA5386.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение имени перечисления
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
Нарушение целочисленного значения
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
Решение
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: не используйте устаревшие протоколы безопасности
CA5397: не используйте устаревшие значения SslProtocols
CA5398: избегайте жестко закодированных значений SslProtocols