Sicherheit: Die Codierung für Cookienamen wurde entfernt
Nach dem neuen Standard für HTTP-Cookies sind nur bestimmte Zeichen in Cookienamen und -werten zulässig. Damit nicht zulässige Zeichen unterstützt werden können, tut ASP.NET Core Folgendes:
- Wenn ein Antwortcookie erstellt wird, werden die Zeichen codiert.
- Wenn ein Anforderungscookie gelesen wird, werden die Zeichen decodiert.
Als Reaktion auf ein Sicherheitsproblem wurde dieses Codierungsverhalten in ASP.NET Core 5.0 geändert.
Weitere Informationen finden Sie unter dem GitHub-Issue dotnet/aspnetcore#23578.
Eingeführt in Version
5.0 Preview 8
Altes Verhalten
Antwortcookienamen wurden codiert. Anforderungscookienamen wurden decodiert.
Neues Verhalten
Das Codieren und Decodieren von Cookienamen wurde entfernt. Bei bisher unterstützten Versionen von ASP.NET Core plant das Team, das Decodierungsproblem direkt zu lösen. Außerdem wird beim Aufrufen von IResponseCookies.Append mit einem ungültigen Cookiename eine Ausnahme des Typs ArgumentException zurückgegeben. Das Codieren und Decodieren von Cookiewerten bleibt unverändert.
Grund für die Änderung
In mehreren Webframeworks wurde ein Problem entdeckt. Das Codieren und Decodieren könnte es einem Angreifer ermöglichen, ein Sicherheitsfeature namens Cookiepräfixe zu umgehen, indem reservierte Präfixe wie __Host-
mit codierten Werten wie __%48ost-
per Spoofing manipuliert werden. Für einen solchen Angriff ist ein sekundärer Exploit erforderlich, um die durch Spoofing manipulierten Cookies in die Website zu injizieren, z. B. über ein XSS-Sicherheitsrisiko (Cross-Site-Scripting). Diese Präfixe werden in ASP.NET Core oder Microsoft.Owin
-Bibliotheken oder -Vorlagen nicht standardmäßig verwendet.
Empfohlene Aktion
Wenn Sie Projekte zu ASP.NET Core 5.0 oder höher verschieben, sollten Sie dafür sorgen, dass die entsprechen Cookienamen den Tokenspezifikationsanforderungen entsprechen: ASCII-Zeichen außer Steuerzeichen und Trennzeichen ("(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
). Bei Verwendung von Nicht-ASCII-Zeichen in Cookienamen oder anderen HTTP-Headern kann der Server eine Ausnahme auslösen, oder es wird ein nicht ordnungsgemäßer Roundtrip vom Client durchgeführt.
Betroffene APIs
- HttpRequest.Cookies
- HttpResponse.Cookies
Microsoft.Owin.IOwinRequest.Cookies
Microsoft.Owin.IOwinResponse.Cookies