Zabezpieczenia: usunięto kodowanie nazw plików cookie
Standard pliku cookie HTTP zezwala tylko na określone znaki w nazwach i wartościach plików cookie. Aby obsługiwać niedozwolone znaki, ASP.NET Core:
- Koduje podczas tworzenia pliku cookie odpowiedzi.
- Dekoduje podczas odczytywania pliku cookie żądania.
W ASP.NET Core 5.0 to zachowanie kodowania zmieniło się w odpowiedzi na problem z zabezpieczeniami.
Aby zapoznać się z dyskusją, zobacz problem z usługą GitHub dotnet/aspnetcore#23578.
Wprowadzona wersja
5.0 (wersja zapoznawcza 8)
Stare zachowanie
Nazwy plików cookie odpowiedzi są kodowane. Nazwy plików cookie żądań są dekodowane.
Nowe zachowanie
Kodowanie i dekodowanie nazw plików cookie zostało usunięte. W przypadku wcześniejszych obsługiwanych wersji ASP.NET Core zespół planuje rozwiązać problem z dekodowaniem w miejscu. Ponadto wywołanie IResponseCookies.Append z nieprawidłową nazwą pliku cookie zgłasza wyjątek typu ArgumentException. Kodowanie i dekodowanie wartości plików cookie pozostaje niezmienione.
Przyczyna wprowadzenia zmiany
Wykryto problem w wielu strukturach internetowych. Kodowanie i dekodowanie może umożliwić osobie atakującej obejście funkcji zabezpieczeń o nazwie prefiksy plików cookie przez fałszowanie prefiksów zarezerwowanych, takich jak z zakodowanymi wartościami, takimi jak __Host-
__%48ost-
. Atak wymaga dodatkowego wykorzystania w celu wstrzyknięcia sfałszowanych plików cookie, takich jak luka w zabezpieczeniach skryptów między witrynami (XSS) w witrynie internetowej. Te prefiksy nie są domyślnie używane w ASP.NET Core lub Microsoft.Owin
biblioteki ani szablony.
Zalecana akcja
Jeśli przenosisz projekty do platformy ASP.NET Core 5.0 lub nowszej, upewnij się, że ich nazwy plików cookie są zgodne z wymaganiami specyfikacji tokenu: znaki ASCII z wyłączeniem kontrolek i separatorów "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
. Użycie znaków innych niż ASCII w nazwach plików cookie lub innych nagłówków HTTP może spowodować wyjątek od serwera lub być nieprawidłowo zaokrąglone przez klienta.
Dotyczy interfejsów API
- HttpRequest.Cookies
- HttpResponse.Cookies
Microsoft.Owin.IOwinRequest.Cookies
Microsoft.Owin.IOwinResponse.Cookies