Thông số kỹ thuật của giao thức WebSocket gần đây đã được cập nhật để giải quyết các vấn đề bảo mật trước đó và nhìn chung là ổn định. Dưới đây là bản tóm tắt về các thay đổi liên quan, cùng một số lưu ý về cách triển khai hiện tại.
Điều gì đã thay đổi kể từ WebSocket HyBi 00?
- Định dạng khung giao thức đã thay đổi. HyBi 00 từng sử dụng
"0x00"
cho đầu và"0xff"
cho đuôi cho mỗi khung hình. HyBi 10 hiện sử dụng định dạng mới như sau:
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 ... |
+---------------------------------------------------------------+
Các vấn đề về bảo mật đã được giải quyết
Sec-WebSocket-Key
vàSec-WebSocket-Accept
được thêm thay cho ba khoá của HyBi 00. Trình duyệt cung cấp số được tạo ngẫu nhiên choSec-WebSocket-Key
. Sau đó, máy chủ sử dụng mã này với GUID cụ thể của giao thức WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) và SHA1 / BASE64, v.v. để trả vềSec-WebSocket-Accept
để trình duyệt có thể xác nhận rằng trình duyệt hiểu được WebSocket. Điều này giúp ngăn chặn cuộc tấn công trên nhiều giao thức.- Giờ đây, bạn bắt buộc phải che khung trên mỗi khung. Điều này giúp ngăn chặn việc nhiễm độc bộ nhớ đệm trên proxy.
Sec-WebSocket-Origin
được thêm vào để ngăn chặn quyền truy cập của các tập lệnh mà nhà cung cấp dịch vụ không biết. Sec-WebSocket-Origin
được thêm vào thay cho khoá Origin của HyBi 00 để ngăn các tập lệnh mà nhà cung cấp dịch vụ không biết truy cập. Xin lưu ý rằng đây sẽ chỉ là "Origin
" trên HyBi 11.
Thay đổi về API JS
subprotocol
hiện có thể là mảng, cho phép chữ ký phương thức củanew WebSocket(String url, Array subprotocol)
- Thuộc tính
.protocol
[Chuỗi] - Thuộc tính
.binaryType
[Blob|ArrayBuffer] .extension
[Chuỗi]- Mã trạng thái và lý do (lý do kết nối bị đóng) đã được thêm vào
CloseEvent
. Hàmclose()
cũng đã được thay đổi để chấp nhận 2 đối số này cho phù hợp.
Phần mở rộng
- Đã thêm
Sec-WebSocket-Extensions
. Các tiện ích được đề xuất là: deflate-frame
nén các khung hình tại nguồn và trích xuất tại đích.x-google-mux
để hỗ trợ tính năng đa kênh nhưng đang ở giai đoạn đầu.
Có khả năng tương thích giữa HyBi 00 và HyBi 10 trên cả máy chủ và trình duyệt khi triển khai không?
- Việc triển khai máy chủ có thể hỗ trợ cả HyBi 00 và HyBi 10 bằng cách xem xét tiêu đề HTTP bắt tay. Tuy nhiên, bạn không nên hỗ trợ HyBi 00 vì phiên bản này đã được xác định là dễ bị tấn công.
- API JavaScript WebSocket có nhiều điểm tương đồng giữa phiên bản cũ và mới. Tuy nhiên, như đã lưu ý ở trên, bạn không nên hỗ trợ HyBi 00 vì phiên bản này đã được xác định là dễ bị tấn công.
Trình duyệt nào hỗ trợ HyBi 10?
- Chrome 14 hỗ trợ giao thức HyBi 10 mặc dù các thay đổi về API JavaScript WebSocket được đề cập ở trên vẫn đang trong quá trình triển khai. Firefox 7 cũng dự kiến sẽ hỗ trợ HyBi 10.