安全性:Cookie 名称编码已删除
HTTP Cookie 标准 仅允许在 Cookie 名称和值中使用特定字符。 为了支持不允许的字符,ASP.NET Core:
- 在创建响应 Cookie 时进行编码。
- 在读取请求 Cookie 时进行解码。
在 ASP.NET Core 5.0 中,此编码行为因安全问题发生了更改。
有关讨论,请参阅 GitHub 问题 dotnet/aspnetcore#23578。
引入的版本
5.0 预览版 8
旧行为
对响应 Cookie 名称进行编码。 对请求 Cookie 名称进行解码。
新行为
删除了 Cookie 名称的编码和解码。 对于先前受支持的 ASP.NET Core 版本,团队计划就地缓解解码问题。 此外,使用无效的 Cookie 名称调用 IResponseCookies.Append 将引发 ArgumentException 类型的异常。 Cookie 值的编码和解码保持不变。
更改原因
在多个 Web 框架中发现了问题。 编码和解码可以使攻击者使用诸如 __%48ost-
的编码值来假冒 __Host-
之类的保留前缀,从而绕过称为 Cookie 前缀的安全功能。 此攻击需要利用辅助攻击(例如跨站点脚本 (XSS) 漏洞)在网站中注入欺诈性 Cookie。 默认情况下,ASP.NET Core 或者 Microsoft.Owin
库或模板中不使用这些前缀。
建议操作
如果要将项目迁移到 ASP.NET Core 5.0 或更高版本,请确保其 Cookie 名称符合令牌规范要求:ASCII 字符不包括控件和分隔符 "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
。 如果在 Cookie 名称或其他 HTTP 标头中使用非 ASCII 字符,则可能导致服务器异常或客户端不正确地往返。
受影响的 API
- HttpRequest.Cookies
- HttpResponse.Cookies
Microsoft.Owin.IOwinRequest.Cookies
Microsoft.Owin.IOwinResponse.Cookies
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈