Firefox 跨 Websocket 主机域泄露 cookie

标签 firefox cookies websocket

在 Firefox 9 和 10 中使用 Firebug 和 Live headers, 我看到 websocket 请求/响应对跨域发送,但 Cookie: 内容错误。

给出两个网址 -

基本网页 - http://www.mysite.test/mywebapp

Websocket url - http://stompeserver.mysite.test/stomp

浏览器似乎正在发送基本页面主机名的 cookie,而不是与辅助主机名关联的任何 cookie。即随基本网页加载的 JSESSIONID cookie 正在回显到外部连接。

这是错误还是预期行为?我从未见过 websocket 如何对 cookie 使用react。

IMO,将网站的 cookie 暴露给外部 websocket 服务可能会造成非常严重的安全违规。


已更新至 Firefox 10,但仍然存在问题。

下面是两个背对背连接的稍微澄清的实时 header 跟踪

JSESSIONID 和 CLIENT_LOCALE Cookie 会从应用服务器 9443 复制到 mq 服务器 61623。

----------------------------------------------------------
https://myapp.com:9443/server/themes/standard/public/gwt/xxstandard/images/logout-icon.png

GET https://myapp.com:9443/server/themes/standard/public/gwt/xxstandard/images/logout-icon.png HTTP/1.1
Host: myapp.com:9443
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: https://myapp.com:9443/server/example.htm?gwt.codesvr=127.0.0.1:9997&log_level=INFO
Cookie: JSESSIONID=0000wCOpgfIsSNOz2lL22O5LOiI:-1; CLIENT_LOCALE=en_US; 
Pragma: no-cache
Cache-Control: no-cache

HTTP/1.1 200 OK
Date: Thu, 16 Feb 2012 19:02:55 GMT
Content-Type: text/plain
Last-Modified: Wed, 29 Jun 2011 20:44:11 GMT
Content-Length: 669
Content-Language: en-US
Server: WebSphere Application Server/7.0
----------------------------------------------------------
http://myapp.com:61623/stomp

GET http://myapp.com:61623/stomp HTTP/1.1
Host: myapp.com:61623
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Proxy-Connection: keep-alive
Sec-WebSocket-Version: 8
Sec-WebSocket-Origin: https://myapp.com:9443
Sec-WebSocket-Key: FToA/HGiVQN3CbGOgNffMA==
Cookie: JSESSIONID=0000wCOpgfIsSNOz2lL22O5LOiI:-1; CLIENT_LOCALE=en_US; 
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Connection: Upgrade

HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: 5lqrLU4mbPiEasSn4gqOlqWvGgw=
----------------------------------------------------------

最佳答案

同源策略和 CORS 不适用于 WebSocket。

对于 WS,在初始 WS 打开握手中发送“原始”HTTP header ,对于浏览器,此原始 header 必须包含最初提供打开 WS 的 HTML/JS 的服务器的主机名。

WS 服务器可以自由地接受/拒绝。

对于非浏览器 WS 客户端,原始 header 可能存在也可能不存在,并且可能包含任何内容。

Cookie:WS 规范未指定它。请参阅此处 Patrick 的回复(Firefox WS 开发人员)

http://www.ietf.org/mail-archive/web/hybi/current/msg08017.html

关于Firefox 跨 Websocket 主机域泄露 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304283/

相关文章:

angularjs - 带有 Firebug 的 Firefox 中的 Angular 堆栈跟踪

firefox - 使用 MediaRecorder 指定编解码器

jQuery focus() 在 FireFox 中不起作用,但在 Chrome 中起作用

javascript - 使用 showdowbox.js 弹出窗口的 18+ 免责声明

swift - 快速自动设置cookies

Rust 支持 cookie 的 HTTP 客户端

javascript - 不切换到 IE 或 Firefox 中的窗口

java - Netty WebSocket 客户端 channel 在 Linux 服务器上总是处于非 Activity 状态

javascript - 用于连接到不同 WebSocket 服务器的多个 WebSocket 客户端的 Node.js 集群?

python-websocket 和 socket.io 命名空间