CA5368: настройка ViewStateUserKey для классов, производных от страницы

Свойство Значение
Идентификатор правила CA5368
Заголовок задайте ViewStateUserKey для классов, производных от Page
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

Свойство Page.ViewStateUserKey не назначено в методе Page.OnInit или Page_Init.

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

При разработке веб-формы ASP.NET следует учитывать атаки с подделкой межсайтовых запросов (CSRF). Атака CSRF позволяет отправлять вредоносные запросы от пользователя, прошедшего проверку подлинности, в веб-форму ASP.NET Core.

Одним из способов защиты от атак CSRF в веб-форме ASP.NET является задание непредсказуемой и уникальной для сеанса строки в качестве значения свойства ViewStateUserKey страницы. Дополнительные сведения см. в статье Сведения о предотвращении сетевых атак с помощью встроенных функций ASP.NET.

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

Задайте в качестве значения свойства ViewStateUserKey непредсказуемую и уникальную строку на сеанс. Например, если используется состояние сеанса ASP.NET, HttpSessionState.SessionID будет работать.

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

Можно отключить вывод предупреждений для этого правила в следующих случаях:

  • Страница веб-формы ASP.NET не выполняет никаких конфиденциальных операций.
  • Устранение атак с подделкой межсайтовых запросов происходит в форме, которая не определяется этим правилом. Например, если страница наследует от главной страницы, которая содержит защиту от CSRF.

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

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

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

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

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

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

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

Нарушение

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
    }
}

Решение

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
        // Assuming that your page makes use of ASP.NET session state and the SessionID is stable.
        ViewStateUserKey = Session.SessionID;
    }
}