چه چیزی در پروتکل جدید WebSocket متفاوت است

مشخصات پروتکل 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 برنامه ریزی شده است.