Share via


Segurança: codificação de nome de cookie removida

O padrão de cookie HTTP permite apenas caracteres específicos em nomes e valores de cookie. Para dar suporte a caracteres não permitidos, o ASP.NET Core:

  • Faz a codificação ao criar um cookie de resposta.
  • Faz a descodificação ao criar um cookie de solicitação.

No ASP.NET Core 5.0, esse comportamento de codificação mudou em resposta a uma questão de segurança.

Para ver a discussão sobre isso, confira o problema do GitHub dotnet/aspnetcore#23578.

Versão introduzida

5.0 versão prévia 8

Comportamento antigo

Os nomes de cookie de resposta são codificados. Os nomes de cookie de resposta são decodificados.

Novo comportamento

A codificação e a decodificação de nomes de cookie foram removidas. Nas versões anteriores com suporte do ASP.NET Core, a equipe planeja atenuar o problema de decodificação in-loco. Além disso, chamar IResponseCookies.Append com um nome de cookie inválido gera uma exceção do tipo ArgumentException. A codificação e a decodificação de valores de cookie permanecem inalteradas.

Motivo da alteração

Um problema foi descoberto em várias estruturas da Web. A codificação e a decodificação podem permitir que um invasor ignore um recurso de segurança chamado prefixos de cookie falsificando prefixos reservados, como __Host-, com valores codificados, como __%48ost-. O ataque requer uma exploração secundária para injetar os cookies falsificados, como uma vulnerabilidade XSS (cross-site scripting), no site. Esses prefixos não são usados por padrão no ASP.NET Core nem em bibliotecas ou modelos Microsoft.Owin.

Se você estiver migrando projetos para o ASP.NET Core 5.0 ou posterior, verifique se os nomes de cookie estão em conformidade com os requisitos de especificação de token: caracteres ASCII, excluindo controles e separadores "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT. O uso de caracteres não ASCII em nomes de cookie ou em outros cabeçalhos HTTP pode causar uma exceção do servidor ou permitir que o cliente faça um arredondamento incorreto.

APIs afetadas