本周,我们开始从平板电脑和智能手机上的三星浏览器用户那里收到错误日志,其中偶尔会使用逗号分隔发送到我们服务器的 Cookie HTTP 标头中的两个 cookie,而不是标准的分号。当前定义 cookie 和 HTTP 状态管理的RFC RFC 6265表示只接受分号作为分隔符,但它前面的两个 RFC(2965和2109)指定“服务器也应该接受逗号 (, ) 作为 cookie 值之间的分隔符,以便将来兼容。”
这对我们有两个后果:
- 假设有问题的 cookie 包含 Base64 编码的对象。因为逗号不被解释为分隔符,所以标头中的下一个 cookie 被附加到我们尝试转换的 Base64 值的末尾,并且转换崩溃。
- 就 ASP.NET 自己的 cookie 处理而言,逗号分隔符后面的 cookie 是“丢失”的。
在我们这边拼凑一些东西来修复崩溃的转换是很容易的。我可以寻找一个逗号,如果它存在的话,忽略它和它后面的所有东西,转换就会成功。但后来我必须手动处理恢复“丢失”的 cookie,而且真的,如果可能的话,我想避免这些类型的黑客攻击。鉴于 Android 手机上操作系统更新的状态,我非常希望能解决这个问题。但由于较旧的 RFC 建议在服务器端支持逗号作为分隔符,我希望有一些可配置的东西可以让我免费获得这种行为,而无需在我们的应用程序代码中使用不雅的 hack。
所以真的,我要问的是:
- ASP.NET MVC 曾经支持逗号作为 Cookie HTTP 标头中的分隔符吗?
- 如果是这样,是否有任何方法可以在 MVC 5/Framework 4.5.2 上启用该遗留行为?