Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA5394 |
| Заголовок | Не используйте небезопасные источники случайности |
| Категория | Безопасность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Вызывается один из методов System.Random.
Описание правила
Использование криптографически слабого генератора случайных чисел может позволить злоумышленнику предсказать, какое чувствительное к безопасности значение будет создано.
Устранение нарушений
Если для обеспечения безопасности требуется непредсказуемое значение, используйте криптографически надежный генератор случайных чисел, например System.Security.Cryptography.RandomNumberGenerator или System.Security.Cryptography.RNGCryptoServiceProvider.
Когда лучше отключить предупреждения
Можно безопасно отключить предупреждения из этого правила, если вы уверены, что слабые псевдослучайные числа не используются с учетом требований безопасности.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA5394
// The code that's violating the rule is on this line.
#pragma warning restore CA5394
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA5394.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение
using System;
class ExampleClass
{
public void ExampleMethod(Random random)
{
var sensitiveVariable = random.Next();
}
}
Решение
using System;
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(int toExclusive)
{
var sensitiveVariable = RandomNumberGenerator.GetInt32(toExclusive);
}
}