Безопасность: кодировка имени 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
- HttpRequest.Cookies
- HttpResponse.Cookies
Microsoft.Owin.IOwinRequest.Cookies
Microsoft.Owin.IOwinResponse.Cookies