새 WebSocket 프로토콜의 차이점

WebSocket 프로토콜 사양은 이전의 보안 문제를 해결하기 위해 최근 업데이트되었으며 대체로 안정적입니다. 다음은 관련 변경사항의 요약 및 현재 구현에 대한 몇 가지 참고사항입니다.

WebSocket HyBi 00 이후 변경된 사항은 무엇인가요?

  • 프로토콜 프레임 형식이 변경되었습니다. HyBi 00에서는 각 프레임의 헤드에 "0x00"을 사용하고 테일에 "0xff"을 사용했습니다. 이제 HyBi 10은 다음과 같은 새 형식을 사용합니다.
      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-------+-+-------------+-------------------------------+
     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
     |I|S|S|S|  (4)  |A|     (7)     |             (16/63)           |
     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
     | |1|2|3|       |K|             |                               |
     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
     |     Extended payload length continued, if payload len == 127  |
     + - - - - - - - - - - - - - - - +-------------------------------+
     |                               |Masking-key, if MASK set to 1  |
     +-------------------------------+-------------------------------+
     | Masking-key (continued)       |          Payload Data         |
     +-------------------------------- - - - - - - - - - - - - - - - +
     :                     Payload Data continued ...                :
     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
     |                     Payload Data continued ...                |
     +---------------------------------------------------------------+

보안 문제가 해결됨

  • HyBi 00의 세 키 대신 Sec-WebSocket-KeySec-WebSocket-Accept가 추가됩니다. 브라우저는 무작위로 생성된 숫자를 Sec-WebSocket-Key에 제공합니다. 그런 다음 서버는 WebSocket 프로토콜의 특정 GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) 및 SHA1 / BASE64 등을 사용하여 Sec-WebSocket-Accept를 반환하여 브라우저가 WebSocket을 이해하는지 확인할 수 있도록 합니다. 이렇게 하면 교차 프로토콜 공격을 방지할 수 있습니다.
  • 이제 각 프레임에서 프레임 마스킹이 필요합니다. 이렇게 하면 프록시에서 캐시 중독을 방지할 수 있습니다. Sec-WebSocket-Origin는 서비스 제공업체가 인식하지 못하는 스크립트의 액세스를 방지하기 위해 추가되었습니다.
  • 서비스 제공업체가 인식하지 못하는 스크립트의 액세스를 방지하기 위해 HyBi 00의 Origin 키 대신 Sec-WebSocket-Origin가 추가되었습니다. HyBi 11에서는 'Origin'로 표시됩니다.

JS API 변경사항

  • 이제 subprotocol가 배열이 될 수 있으므로 new WebSocket(String url, Array subprotocol) 메서드 서명을 허용합니다.
  • .protocol 속성 [문자열]
  • .binaryType 속성 [Blob|ArrayBuffer]
  • .extension [문자열]
  • 상태 코드 및 이유 (연결이 닫힌 이유)를 CloseEvent에 추가했습니다. 이에 따라 close() 함수도 이러한 두 인수를 허용하도록 변경되었습니다.

확장 프로그램

  • Sec-WebSocket-Extensions가 추가되었습니다. 제안된 광고 확장은 다음과 같습니다.
  • deflate-frame는 소스에서 프레임을 압축하고 대상에서 추출합니다.
  • x-google-mux: 다중화를 지원하지만 초기 단계입니다.

서버와 브라우저 구현 모두에서 HyBi 00과 HyBi 10은 호환되나요?

  • 서버 구현은 핸드셰이크 HTTP 헤더를 확인하여 HyBi 00과 HyBi 10을 모두 지원할 수 있습니다. 그러나 HyBi 00은 취약한 것으로 알려져 있으므로 지원하지 않는 것이 좋습니다.
  • WebSocket JavaScript API는 이전 버전과 새 버전 간에 대체로 유사합니다. 하지만 위에서 설명한 것처럼 HyBi 00은 취약한 것으로 알려져 있으므로 지원하지 않는 것이 좋습니다.

어떤 브라우저가 HyBi 10을 지원하나요?

  • Chrome 14는 HyBi 10 프로토콜을 지원하지만 위에 언급된 WebSocket JavaScript API 변경사항은 아직 진행 중입니다. Firefox 7도 HyBi 10을 지원할 예정입니다.