Spesifikasi protokol WebSocket baru-baru ini diperbarui untuk mengatasi masalah keamanan sebelumnya dan sebagian besar sudah stabil. Di bawah ini adalah ringkasan perubahan yang terlibat, bersama dengan beberapa catatan tentang implementasi saat ini.
Apa yang telah berubah sejak WebSocket HyBi 00?
- Format frame protokol telah diubah. HyBi 00 sebelumnya menggunakan
"0x00"
untuk head dan"0xff"
untuk ekor untuk setiap frame. HyBi 10 sekarang menggunakan format baru seperti berikut:
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 ... |
+---------------------------------------------------------------+
Masalah keamanan telah diatasi
Sec-WebSocket-Key
danSec-WebSocket-Accept
ditambahkan sebagai pengganti tiga kunci HyBi 00. Browser memberikan angka yang dibuat secara acak keSec-WebSocket-Key
. Kemudian, server menggunakannya dengan GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) khusus protokol WebSocket dan SHA1 / BASE64, dll. untuk menampilkanSec-WebSocket-Accept
sehingga browser dapat mengonfirmasi bahwa browser memahami WebSocket. Tindakan ini mencegah serangan lintas protokol.- Pada setiap frame, kini masking frame diperlukan. Hal ini mencegah {i>cache poisoning<i} pada {i>proxy<i}.
Sec-WebSocket-Origin
ditambahkan untuk mencegah akses dari skrip yang tidak diketahui penyedia layanan. Sec-WebSocket-Origin
ditambahkan sebagai pengganti kunci Origin HyBi 00 untuk mencegah akses dari skrip yang tidak diketahui penyedia layanan. Perhatikan bahwa ini hanya akan menjadi "Origin
" di HyBi 11.
Perubahan JS API
subprotocol
kini dapat berupa array, yang memungkinkan tanda tangan metodenew WebSocket(String url, Array subprotocol)
- Atribut
.protocol
[String] - Atribut
.binaryType
[Blob|ArrayBuffer] .extension
[String]- Kode status dan alasan (alasan koneksi ditutup) telah ditambahkan ke
CloseEvent
. Fungsiclose()
juga telah diubah untuk menerima kedua argumen ini.
Ekstensi
Sec-WebSocket-Extensions
ditambahkan. Ekstensi yang diusulkan adalah:deflate-frame
membuat frame yang dikompresi pada sumber dan diekstrak di tujuan.x-google-mux
untuk mendukung multiplexing, tetapi masih dalam tahap awal.
Apakah ada kompatibilitas antara HyBi 00 dan HyBi 10 pada implementasi server dan browser?
- Implementasi server dapat mendukung HyBi 00 dan HyBi 10 dengan melihat header HTTP handshake. Namun, mendukung HyBi 00 tidak disarankan karena diketahui rentan.
- WebSocket JavaScript API sebagian besar mirip dengan versi lama dan baru. Namun, seperti disebutkan di atas, kami tidak merekomendasikan dukungan untuk HyBi 00 karena diketahui rentan.
Browser apa yang mendukung HyBi 10?
- Chrome 14 mendukung protokol HyBi 10 meskipun perubahan WebSocket JavaScript API yang disebutkan di atas masih dalam proses. Firefox 7 juga direncanakan untuk mendukung HyBi 10.