مشخصات پروتکل 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
به جای سه کلید HyBi 00 اضافه شده اند. مرورگر شماره تولید شده به صورت تصادفی را بهSec-WebSocket-Key
می دهد. سپس، سرور آن را با GUID خاص پروتکل WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) و SHA1 / BASE64 و غیره برای برگرداندنSec-WebSocket-Accept
استفاده می کند تا مرورگر بتواند تأیید کند که WebSocket را درک می کند. این از حمله متقابل پروتکل جلوگیری می کند. - اکنون در هر فریم، ماسک کردن قاب مورد نیاز است. این از مسمومیت کش در پروکسی جلوگیری می کند.
Sec-WebSocket-Origin
برای جلوگیری از دسترسی اسکریپت هایی که ارائه دهنده سرویس از آنها اطلاعی ندارد اضافه شده است. -
Sec-WebSocket-Origin
به جای کلید مبدا HyBi 00 اضافه شده است تا از دسترسی اسکریپت هایی که ارائه دهنده سرویس از آنها اطلاعی ندارد جلوگیری کند. توجه داشته باشید که این فقط "Origin
" در HyBi 11 خواهد بود.
JS API تغییر می کند
-
subprotocol
اکنون می تواند آرایه باشد، که اجازه می دهد یک متد امضایnew WebSocket(String url, Array subprotocol)
- ویژگی
.protocol
[رشته] - ویژگی
.binaryType
[Blob|ArrayBuffer] -
.extension
[رشته] - کد وضعیت و دلیل (چرا اتصال بسته است) به
CloseEvent
اضافه شده است. تابعclose()
نیز برای پذیرش این دو آرگومان بر این اساس تغییر کرده است.
برنامه های افزودنی
-
Sec-WebSocket-Extensions
اضافه شده است. الحاقات پیشنهادی عبارتند از: -
deflate-frame
فریم ها را در مبدا فشرده و در مقصد استخراج می کند. -
x-google-mux
از مالتی پلکس پشتیبانی می کند اما در مرحله اولیه است.
آیا سازگاری بین HyBi 00 و HyBi 10 در اجرای سرور و مرورگر وجود دارد؟
- پیاده سازی های سرور می توانند از HyBi 00 و HyBi 10 با نگاه کردن به هدر HTTP handshake پشتیبانی کنند. با این حال، پشتیبانی از HyBi 00 توصیه نمی شود زیرا آسیب پذیر است.
- WebSocket JavaScript API تا حد زیادی بین نسخه های قدیمی و جدید مشابه است. اما همانطور که در بالا ذکر شد، ما پشتیبانی از HyBi 00 را توصیه نمی کنیم زیرا آسیب پذیر است.
کدام مرورگر از HyBi 10 پشتیبانی می کند؟
- Chrome 14 از پروتکل HyBi 10 پشتیبانی می کند، اگرچه تغییرات WebSocket JavaScript API ذکر شده در بالا هنوز در راه است. فایرفاکس 7 نیز برای پشتیبانی از HyBi 10 برنامه ریزی شده است.