Zabezpečení: Odebrané kódování názvu souboru cookie
Standard http cookie umožňuje pouze konkrétní znaky v názvech a hodnotách souborů cookie. Pokud chcete podporovat nepovolené znaky, ASP.NET Core:
- Kóduje při vytváření souboru cookie odpovědi.
- Dekóduje při čtení souboru cookie požadavku.
V ASP.NET Core 5.0 se toto chování kódování změnilo v reakci na bezpečnostní obavy.
Diskuzi najdete v tématu o problému GitHubu dotnet/aspnetcore#23578.
Zavedená verze
5.0 Preview 8
Staré chování
Názvy souborů cookie odpovědi jsou kódovány. Názvy souborů cookie požadavku jsou dekódovány.
Nové chování
Kódování a dekódování názvů souborů cookie bylo odebráno. V případě předchozích podporovaných verzí ASP.NET Core tým plánuje zmírnit problém dekódování. IResponseCookies.Append Volání s neplatným názvem souboru cookie navíc vyvolá výjimku typu ArgumentException. Kódování a dekódování hodnot cookie zůstává beze změny.
Důvod změny
V několika webových architekturách došlo k problému. Kódování a dekódování by útočníkovi mohlo umožnit obejít funkci zabezpečení označovanou jako předpony cookie falšováním vyhrazených předpon, jako jsou __Host-
kódované hodnoty jako __%48ost-
. Útok vyžaduje sekundární zneužití pro vložení falšovaných souborů cookie, jako je ohrožení zabezpečení skriptování mezi weby (XSS) na webu. Tyto předpony se ve výchozím nastavení nepoužívají v ASP.NET Jádru nebo knihovnách nebo Microsoft.Owin
šablonách.
Doporučená akce
Pokud přesouváte projekty do ASP.NET Core 5.0 nebo novější, ujistěte se, že jejich názvy souborů cookie odpovídají požadavkům specifikace tokenu: Znaky ASCII s výjimkou ovládacích "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
prvků a oddělovačů . Použití znaků jiného typu než ASCII v názvech souborů cookie nebo jiných hlavičkách HTTP může způsobit výjimku ze serveru nebo může být klientem nesprávně zaokrouhlený.
Ovlivněná rozhraní API
- HttpRequest.Cookies
- HttpResponse.Cookies
Microsoft.Owin.IOwinRequest.Cookies
Microsoft.Owin.IOwinResponse.Cookies