CA5358: Não use modos de codificação não seguros
Property | valor |
---|---|
ID da regra | CA5358 |
Título | Não use modos de codificação não seguros |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Não |
Motivo
Utilização de um dos seguintes modos de encriptação não seguros que não é aprovado:
- System.Security.Cryptography.CipherMode.ECB
- System.Security.Cryptography.CipherMode.OFB
- System.Security.Cryptography.CipherMode.CFB
Descrição da regra
Esses modos são vulneráveis a ataques e podem causar a exposição de informações confidenciais. Por exemplo, usar ECB
para criptografar um bloco de texto sem formatação sempre produz um mesmo texto cifrado, para que ele possa facilmente dizer se duas mensagens criptografadas são idênticas. A utilização de modos aprovados pode evitar estes riscos desnecessários.
Como corrigir violações
- Use apenas modos aprovados (System.Security.Cryptography.CipherMode.CBC, System.Security.Cryptography.CipherMode.CTS).
Quando suprimir avisos
É seguro suprimir um aviso desta regra se:
- Os especialistas em criptografia analisaram e aprovaram o uso do modo de cifra.
- O referenciado CipherMode não é usado para uma operação criptográfica.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA5358
// The code that's violating the rule is on this line.
#pragma warning restore CA5358
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5358.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Atribuir o BCE à propriedade Mode
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.ECB
};
}
}
Utilização do valor BCE
using System;
using System.Security.Cryptography;
class ExampleClass
{
private static void ExampleMethod()
{
Console.WriteLine(CipherMode.ECB);
}
}
Solução
using System.Security.Cryptography;
class ExampleClass {
private static void ExampleMethod () {
RijndaelManaged rijn = new RijndaelManaged
{
Mode = CipherMode.CBC
};
}
}