CA5394: Nie używaj niezabezpieczonej losowości

Właściwości Wartość
Identyfikator reguły CA5394
Stanowisko Nie używaj niezabezpieczonej losowości
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Wywoływana jest jedna z metod System.Random .

Opis reguły

Użycie kryptograficznie słabego generatora liczb pseudolosowych może umożliwić atakującemu przewidywanie, jaka wartość wrażliwa na zabezpieczenia zostanie wygenerowana.

Jak naprawić naruszenia

Jeśli potrzebujesz nieprzewidywalnej wartości zabezpieczeń, użyj kryptograficznie silnego generatora liczb losowych, takiego jak System.Security.Cryptography.RandomNumberGenerator lub System.Security.Cryptography.RNGCryptoServiceProvider.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenia z tej reguły, jeśli masz pewność, że słabe liczby pseudolosowe nie są używane w sposób poufny na zabezpieczenia.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

Naruszenie

using System;

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

Rozwiązanie

using System;
using System.Security.Cryptography;

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