Поделиться через


CA5404: не отключать проверки токена

Свойство Значение
Идентификатор правила CA5404
Заголовок Не отключайте проверки маркеров
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 9 No

Причина

Задание TokenValidationParameters свойствRequireExpirationTime, или ValidateIssuerValidateAudienceValidateLifetime в falseзначение .

Описание правила

Проверка токенов гарантирует, что при проверке анализируются и проверяются все аспекты. Отключение проверки может привести к появлению брешей в системе безопасности из-за прохождения проверки ненадежными токенами.

Дополнительные сведения о рекомендациях по проверке токенов можно найти на вики-странице библиотеки.

Устранение нарушений

Задайте свойствам TokenValidationParameters RequireExpirationTime, ValidateAudience, ValidateIssuer или ValidateLifetime значение true. Или удалите это присваивание значения параметру false, так как он имеет значение по умолчанию true.

Когда лучше отключить предупреждения

В подавляющем большинстве случаев такая проверка необходима для обеспечения безопасности потребляющего приложения. Однако иногда такая проверка не требуется, особенно для нестандартных типов токенов. Перед отключением этой проверки убедитесь, что вы полностью оценили последствия с точки зрения безопасности. Дополнительные сведения о преимуществах и недостатках см. на вики-странице библиотеки проверки токенов.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

Примеры псевдокода

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.RequireExpirationTime = false;
        parameters.ValidateAudience = false;
        parameters.ValidateIssuer = false;
        parameters.ValidateLifetime = false;
    }
}

Решение

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.RequireExpirationTime = true;
        parameters.ValidateAudience = true;
        parameters.ValidateIssuer = true;
        parameters.ValidateLifetime = true;
    }
}