CA5386 : Éviter tout codage en dur de la valeur de SecurityProtocolType
Propriété | Value |
---|---|
Identificateur de la règle | CA5386 |
Titre | Éviter tout codage en dur de la valeur de SecurityProtocolType |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Cette règle se déclenche lorsque l’une des conditions suivantes est remplie :
- Une valeur sécurisée mais codée en dur a été référencée System.Net.SecurityProtocolType.
- Une valeur entière représentant une version de protocole sécurisée a été affectée à une variable SecurityProtocolType.
Les valeurs sécurisées sont les suivantes :
- Tls12
- Tls13
Description de la règle
TLS (Transport Layer Security) sécurise la communication entre les ordinateurs, le plus souvent avec HTTPS (Hypertext Transfer Protocol Secure). Les versions de protocole TLS 1.0 et TLS 1.1 sont déconseillées, tandis que TLS 1.2 et TLS 1.3 sont à jour. À l’avenir, TLS 1.2 et TLS 1.3 peuvent être dépréciés. Pour vous assurer que votre application reste sécurisée, évitez de coder en dur une version de protocole et ciblez au moins .NET Framework v4.7.1. Pour plus d’informations, consultez Meilleures pratiques TLS (Transport Layer Security) avec .NET Framework.
Comment corriger les violations
Ne codez pas en dur les versions du protocole TLS.
Quand supprimer les avertissements
Vous pouvez supprimer cet avertissement si votre application cible est .NET Framework v4.6.2 ou une version antérieure et peut s’exécuter sur un ordinateur qui a des valeurs par défaut non sécurisées.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA5386
// The code that's violating the rule is on this line.
#pragma warning restore CA5386
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA5386.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
Violation du nom d’énumération
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
Violation de valeur entière
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
Solution
using System;
using System.Net;
public class TestClass
{
public void TestMethod()
{
// Let the operating system decide what TLS protocol version to use.
// See https://zcusa.951200.xyz/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://zcusa.951200.xyz/dotnet/framework/network-programming/tls
End Sub
End Class
Règles associées
CA5364 : Ne pas utiliser de protocoles de sécurité dépréciés