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


Безопасность: кодировка имени cookie удалена

В соответствии со стандартом HTTP в именах и значениях файлов cookie могут использоваться только определенные символы. Поддержка недопустимых символов в ASP.NET Core реализуется следующим образом:

  • Кодирование при создании файла cookie ответа.
  • Декодирование при чтении файла cookie запроса.

В ASP.NET Core 5.0 это поведение кодирования изменилось в связи выявленными проблемами с безопасностью.

Обсуждение этого вопроса см. на странице GitHub dotnet/aspnetcore#23578.

Представленные версии

5.0, предварительная версия 8

Старое поведение

Имена файлов cookie ответов кодируются. Имена файлов cookie запросов декодируются.

Новое поведение

Кодирование и декодирование имен файлов cookie было исключено. Для предшествующих поддерживаемых версий ASP.NET Core команда разработчиков планирует устранять проблемы с декодированием на местах. Кроме того, при вызове IResponseCookies.Append с указанием недопустимого имени файла cookie возникает исключение ArgumentException. Способ кодирования и декодирования значений файлов cookie не изменился.

Причина изменения

На нескольких веб-платформах были обнаружены проблемы. В процессе кодирования и декодирования злоумышленник получал возможность обойти защитную функцию префиксов файлов cookie путем подмены зарезервированных префиксов, таких как __Host-, закодированными значениями, например __%48ost-. Для проведения такой атаки требуется использовать дополнительную уязвимость веб-сайта для внедрения ложных файлов cookie, например уязвимость межсайтовых сценариев (XSS). По умолчанию эти префиксы не используются в ASP.NET Core, а также в библиотеках или шаблонах Microsoft.Owin.

Если вы перемещаете проекты в ASP.NET Core 5.0 или более поздней версии, убедитесь, что их имена файлов cookie соответствуют требованиям спецификации маркеров: символы ASCII, за исключением элементов управления и разделителей "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT. Если в именах файлов cookie или других заголовках HTTP используются не входящие в набор ASCII символы, это может привести к возникновению исключения на сервере или некорректной передаче данных клиенту и обратно.

Затронутые API