Compartilhar via


CA5394: Não usar aleatoriedade não segura

Property Valor
ID da regra CA5394
Título Não usar aleatoriedade não segura
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Um dos métodos de System.Random é invocado.

Descrição da regra

O uso de um gerador de número pseudo-aleatório criptograficamente fraco pode permitir que um invasor preveja qual valor sensível à segurança será gerado.

Como corrigir violações

Se você precisar de um valor imprevisível para a segurança, use um gerador de número aleatório criptograficamente forte como System.Security.Cryptography.RandomNumberGenerator ou System.Security.Cryptography.RNGCryptoServiceProvider.

Quando suprimir avisos

É seguro suprimir avisos dessa regra se você tiver certeza de que os números pseudoaleatórios fracos não são usados de maneira sensível à segurança.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação

using System;

class ExampleClass
{
    public void ExampleMethod(Random random)
    {
        var sensitiveVariable = random.Next();
    }
}

Solução

using System;
using System.Security.Cryptography;

class ExampleClass
{
    public void ExampleMethod(int toExclusive)
    {
        var sensitiveVariable = RandomNumberGenerator.GetInt32(toExclusive);
    }
}