Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA5398 |
| Заголовок | Избегайте жестко зафиксированных значений SslProtocols |
| Категория | Безопасность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Это правило срабатывает при выполнении любого из следующих условий:
- Было указано надежное, но жестко заданное значение System.Security.Authentication.SslProtocols.
- Целочисленное значение, представляющее безопасную версию протокола, было назначено переменной SslProtocols, использовано в качестве возвращаемого значения SslProtocols или аргумента SslProtocols.
Безопасными являются следующие значения:
- Tls12
- Tls13
Описание правила
Протокол безопасности транспортного уровня (TLS) защищает общение между компьютерами, чаще всего при помощи протокола защищённой передачи гипертекста (HTTPS). Протоколы версии TLS 1.0 и TLS 1.1 являются устаревшими, а TLS 1.2 и TLS 1.3 являются актуальными. В будущем протоколы TLS 1.2 и TLS 1.3 могут быть отмечены как нерекомендуемые. Чтобы обеспечить безопасность приложения, не следует жестко задавать версию протокола. Дополнительные сведения см. в разделе Рекомендации по использованию протокола TLS с .NET Framework.
Устранение нарушений
Не следует жестко задавать версии протокола TLS.
Когда лучше отключить предупреждения
Если вам нужно подключиться к устаревшей службе, которая не может быть обновлена для использования будущих версий протокола TLS, безопасно отключить предупреждение.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA5398
// The code that's violating the rule is on this line.
#pragma warning restore CA5398
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA5398.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение правил именования перечислений
using System;
using System.Security.Authentication;
public class ExampleClass
{
public void ExampleMethod()
{
// CA5398 violation
SslProtocols sslProtocols = SslProtocols.Tls12;
}
}
Imports System
Imports System.Security.Authentication
Public Class TestClass
Public Function ExampleMethod() As SslProtocols
' CA5398 violation
Return SslProtocols.Tls12
End Function
End Class
Нарушение целочисленного значения
using System;
using System.Security.Authentication;
public class ExampleClass
{
public SslProtocols ExampleMethod()
{
// CA5398 violation
return (SslProtocols) 3072; // TLS 1.2
}
}
Imports System
Imports System.Security.Authentication
Public Class TestClass
Public Function ExampleMethod() As SslProtocols
' CA5398 violation
Return CType(3072, SslProtocols) ' TLS 1.2
End Function
End Class
Решение
using System;
using System.Security.Authentication;
public class TestClass
{
public void Method()
{
// Let the operating system decide what TLS protocol version to use.
// See https://learn.microsoft.com/dotnet/framework/network-programming/tls
SslProtocols sslProtocols = SslProtocols.None;
}
}
Imports System
Imports System.Security.Authentication
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
Dim sslProtocols As SslProtocols = SslProtocols.None
End Sub
End Class
Связанные правила
CA5364: не используйте устаревшие протоколы безопасности
CA5386: избегайте жесткого кодирования значения SecurityProtocolType