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의 키 3개 대신
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
속성 [String].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는 위에 언급된 WebSocket JavaScript API 변경사항이 아직 진행 중이지만 HyBi 10 프로토콜을 지원합니다. Firefox 7도 HyBi 10을 지원할 예정입니다.