在 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/