Spesifikasi protokol WebSocket baru-baru ini telah diperbarui untuk mengatasi masalah keamanan sebelumnya dan sebagian besar stabil. Berikut adalah ringkasan perubahan yang terlibat, beserta beberapa catatan tentang penerapan saat ini.
Apa yang berubah sejak WebSocket HyBi 00?
- Format frame protokol telah diubah. HyBi 00 digunakan untuk menggunakan
"0x00"
untuk head dan"0xff"
untuk tail untuk setiap frame. HyBi 10 kini 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 dihasilkan secara acak keSec-WebSocket-Key
. Kemudian, server menggunakannya dengan GUID khusus protokol WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) serta SHA1 / BASE64, dan sebagainya untuk menampilkanSec-WebSocket-Accept
sehingga browser dapat mengonfirmasi bahwa browser memahami WebSocket. Hal ini mencegah serangan lintas protokol.- Pada setiap frame, penyamaran frame kini diperlukan. Hal ini mencegah keracunan cache pada proxy.
Sec-WebSocket-Origin
ditambahkan untuk mencegah akses dari skrip yang tidak diketahui oleh penyedia layanan. Sec-WebSocket-Origin
ditambahkan sebagai pengganti kunci Origin HyBi 00 untuk mencegah akses dari skrip yang tidak diketahui oleh 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 dikompresi di 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, sebaiknya jangan mendukung HyBi 00 karena diketahui rentan.
- WebSocket JavaScript API sebagian besar mirip antara versi lama dan baru. Namun, seperti yang disebutkan di atas, sebaiknya jangan mendukung HyBi 00 karena diketahui rentan.
Browser mana 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.