ข้อมูลจำเพาะของโปรโตคอล 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 ... |
+---------------------------------------------------------------+
ปัญหาด้านความปลอดภัยได้รับการแก้ไขแล้ว
- ระบบจะเพิ่ม
Sec-WebSocket-Key
และSec-WebSocket-Accept
แทนคีย์ 3 รายการของ HyBi 00 เบราว์เซอร์จะส่งตัวเลขที่สร้างขึ้นแบบสุ่มไปยังSec-WebSocket-Key
จากนั้นเซิร์ฟเวอร์จะใช้ GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) และ SHA1 / BASE64 เฉพาะของโปรโตคอล WebSocket เพื่อแสดงผลSec-WebSocket-Accept
เพื่อให้เบราว์เซอร์ยืนยันว่าเข้าใจ WebSocket ซึ่งจะช่วยป้องกันโจมตีข้ามโปรโตคอล - ตอนนี้แต่ละเฟรมจะต้องมีการมาสก์เฟรม ซึ่งจะช่วยป้องกันแคชพอยโซนิงในพร็อกซี มีการเพิ่ม
Sec-WebSocket-Origin
เพื่อป้องกันการเข้าถึงจากสคริปต์ที่ผู้ให้บริการไม่รู้จัก - ระบบจะเพิ่ม
Sec-WebSocket-Origin
แทนคีย์ต้นทางของ HyBi 00 เพื่อป้องกันไม่ให้สคริปต์ที่ผู้ให้บริการไม่ทราบเข้าถึง โปรดทราบว่าใน HyBi 11 จะเป็น "Origin
" เท่านั้น
การเปลี่ยนแปลง JS API
- ตอนนี้
subprotocol
จะเป็นอาร์เรย์ได้ ซึ่งช่วยให้มีลายเซ็นเมธอดของnew WebSocket(String url, Array subprotocol)
- แอตทริบิวต์
.protocol
[สตริง] - แอตทริบิวต์
.binaryType
[Blob|ArrayBuffer] .extension
[สตริง]- เพิ่มรหัสสถานะและเหตุผล (สาเหตุที่การเชื่อมต่อถูกปิด) ไปยัง
CloseEvent
แล้ว นอกจากนี้ ฟังก์ชันclose()
ยังมีการเปลี่ยนแปลงให้ยอมรับอาร์กิวเมนต์ 2 รายการนี้ด้วย
ส่วนขยาย
- เพิ่ม
Sec-WebSocket-Extensions
แล้ว ส่วนขยายที่เสนอมีดังนี้ deflate-frame
ทำให้เฟรมถูกบีบอัดที่ต้นทางและดึงข้อมูลได้ที่ปลายทางx-google-mux
เพื่อรองรับมัลติเพล็กซิบ แต่อยู่ในขั้นเริ่มต้น
HyBi 00 และ HyBi 10 ใช้งานร่วมกันได้ไหมทั้งกับเซิร์ฟเวอร์และเบราว์เซอร์
- การใช้งานเซิร์ฟเวอร์จะรองรับทั้ง HyBi 00 และ HyBi 10 ได้โดยดูที่ส่วนหัว HTTP ของแฮนด์เชค อย่างไรก็ตาม เราไม่แนะนําให้รองรับ HyBi 00 เนื่องจากเป็นที่ทราบว่ามีความเสี่ยง
- WebSocket JavaScript API เวอร์ชันเก่าและเวอร์ชันใหม่มีความคล้ายคลึงกันมาก แต่ตามที่ระบุไว้ข้างต้น เราขอแนะนำว่าอย่ารองรับ HyBi 00 เนื่องจากเป็นที่ทราบกันดีว่ามีความเปราะบาง
เบราว์เซอร์ใดบ้างที่รองรับ HyBi 10
- Chrome 14 รองรับโปรโตคอล HyBi 10 แม้ว่าการเปลี่ยนแปลง WebSocket JavaScript API ที่กล่าวถึงข้างต้นจะยังไม่เสร็จสมบูรณ์ นอกจากนี้ Firefox 7 มีแผนจะสนับสนุน HyBi 10 ด้วย