4.5.6. Set-Cookie Behavior 的更改
Set-Cookie HTTP 响应标头语法之前的说明,如 RFC2109 和 RFC2965,当 Cookie 值引用时,允许使用 cookie 值中的空格和其他分隔符字符。JBoss EAP 6.4 中的 JBoss Web 符合前面的规格,并在包含任何分隔符字符时自动引用 Cookie 值。
Set-Cookie HTTP 响应标头语法的 RFC6265 规范指出 Set-Cookie 响应标头中的 Cookie 值必须符合特定的 grammar 约束。例如,它们必须是 US-ASCII 字符,但它们不能包含 CTRL(controls)、空格、双引号、逗号、分号或反斜杠字符。
在 JBoss EAP 7.0 中,在累积补丁红帽 JBoss 企业应用平台 7.0 更新 08 之前,Undertow 不会限制这些无效字符,也不会引用包含排除字符的 Cookie。如果应用此累积补丁或较新的累积补丁,您可以通过将 io.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION 系统属性 兼容 Cookie 验证。
设置为 true 来启用 RFC6265
从 JBoss EAP 7.1 开始,默认情况下 Undertow 不启用 RFC6265 兼容 Cookie 验证。它确实会引用包含排除字符的 Cookie。从 JBoss EAP 7.1 开始,您无法使用 the io.undertow.cookie.DEFAULT_ENABLE_RFC6265_COOKIE_VALIDATION 系统属性,以启用 RFC6265 兼容 Cookie 验证。相反,您可以通过将 rfc6265-cookie-validation 侦听器属性设置为 兼容 Cookie 验证。此属性的默认值为 true 来为 HTTP、HTTPS 或 AJP 侦听器启用 RFC6265false。以下示例为 HTTP 侦听器启用 RFC6265 兼容 Cookie 验证。
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=rfc6265-cookie-validation,value=true)