Sdílet prostřednictvím


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.

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 | HTprvků 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