CA5368: настройка ViewStateUserKey для классов, производных от страницы
Свойство | Значение |
---|---|
Идентификатор правила | CA5368 |
Заголовок | задайте ViewStateUserKey для классов, производных от Page |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | 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;
}
}