Sicurezza: la codifica dei nomi dei cookie è stata rimossa

Lo standard del cookie HTTP consente solo caratteri specifici nei nomi e nei valori dei cookie. Per supportare i caratteri non consentiti, ASP.NET Core:

  • Codifica durante la creazione di un cookie di risposta.
  • Decodifica durante la lettura di un cookie di richiesta.

In ASP.NET Core 5.0 questo comportamento di codifica è cambiato in risposta a un problema di sicurezza.

Per informazioni, vedere Problema di GitHub dotnet/aspnetcore#23578.

Versione introdotta

5.0 Preview 8

Comportamento precedente

I nomi dei cookie di risposta vengono codificati. I nomi dei cookie di richiesta vengono decodificati.

Nuovo comportamento

La codifica e la decodifica dei nomi dei cookie sono state rimosse. Per le versioni precedenti supportate di ASP.NET Core, il team prevede di attenuare il problema di decodifica sul posto. Inoltre, la chiamata IResponseCookies.Append con un nome di cookie non valido genera un'eccezione di tipo ArgumentException. La codifica e la decodifica dei valori dei cookie rimangono invariate.

Motivo della modifica

È stato rilevato un problema in più framework Web. La codifica e la decodifica potrebbero consentire a un utente malintenzionato di ignorare una funzionalità di sicurezza denominata prefissi cookie tramite lo spoofing di prefissi riservati come __Host- con valori codificati come __%48ost-. L'attacco richiede un exploit secondario per inserire i cookie di spoofing, ad esempio una vulnerabilità xsS (cross-site scripting), nel sito Web. Questi prefissi non vengono usati per impostazione predefinita in ASP.NET Core o librerie Microsoft.Owin o modelli.

Se si spostano progetti in ASP.NET Core 5.0 o versione successiva, assicurarsi che i nomi dei cookie siano conformi ai requisiti di specifica del token: caratteri ASCII esclusi i controlli e i separatori "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT. L'uso di caratteri non ASCII nei nomi di cookie o in altre intestazioni HTTP può causare un'eccezione dal server o essere impropriamente sottoposto a round trip dal client.

API interessate