使用相同的 cookie 名称调用 HttpServletResponse.addCookie() 是否安全?

2022-09-04 03:53:31

正在呼叫

HttpServletResponse.addCookie();

(来自 servlet-api-2.5)多次使用同名 cookie 安全吗?

从某种意义上说,存在确定性行为是安全的,例如,后续调用将被忽略(第一个获胜),或者后续调用将始终替换cookie或类似的东西?

例:

HttpServletResponse response = ...;
response.addCookie(new Cookie("foo", "bar"));
response.addCookie(new Cookie("foo", "42"));

哪个值将被传输到浏览器并由浏览器存储?


答案 1

更新的答案 - 正如@skaffman和@Stephen C的评论所示,这不是理想的做法。

http://www.ietf.org/rfc/rfc2109.txt 的 RFC 规范状态

NAME=VALUE 属性-值对必须位于每个 Cookie 中的第一位。如果某个属性在 Cookie 中多次出现,则该行为未定义。

在Tomcat服务器上,行为是发送到浏览器的实际标头:

Set-Cookie: foo=bar
Set-Cookie: foo=42

在这里,foo被覆盖了。稍后阅读饼干会得到42。


答案 2

其他注释 - 请注意,在同一响应中对具有相同名称的 Cookie 设置不同的子域会更改行为。我刚刚测试在我的Mac上最新版本的java 1.6 / firefox / safari / chrome上保存具有相同名称但不同子域的cookie,并且它的行为符合预期,保存了两个cookie。我知道规范不能保证这种行为,但只是说“意识到这一点可能会有所帮助。


推荐