CA5396: задайте для HttpOnly значение true для HttpCookie

Свойство Значение
Идентификатор правила CA5396
Заголовок установите для параметра HttpOnly объекта HttpCookie значение true
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 No

Причина

System.Web.HttpCookie.HttpOnly задан как false. Значение по умолчанию этого свойства равно false.

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

Для обеспечения глубокого уровня защиты HTTP-файлы cookie, чувствительные к безопасности, должны быть помечены как HttpOnly. Это означает, что веб-браузеры должны запрещать скриптам доступ к файлам cookie. Внедренные скрипты являются распространенным способом кражи файлов cookie.

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

Задайте для параметра System.Web.HttpCookie.HttpOnly значение true.

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

  • Если задано глобальное значение HttpOnly, как, например, в следующем примере:

    <system.web>
        ...
        <httpCookies httpOnlyCookies="true" requireSSL="true" />
    </system.web>
    
  • Если вы уверены, что в файлах cookie нет конфиденциальных данных.

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

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

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

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

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

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

Пример

Нарушение:

using System.Web;

class ExampleClass
{
    public void ExampleMethod()
    {
        HttpCookie httpCookie = new HttpCookie("cookieName");
        httpCookie.HttpOnly = false;
    }
}

Решение.

using System.Web;

class ExampleClass
{
    public void ExampleMethod()
    {
        HttpCookie httpCookie = new HttpCookie("cookieName");
        httpCookie.HttpOnly = true;
    }
}