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-Key
및Sec-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을 지원할 예정입니다.