ما أوجه الاختلاف في بروتوكول 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. بعد ذلك، يستخدمه الخادم مع المعرّف الفريد العام (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) الخاص ببروتوكول WebSocket و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 لتأكيد الاتصال. ومع ذلك، لا يُنصح بتفعيل التوافق مع HyBi 00 لأنّه من المعروف أنّه معرّض للهجوم.
  • تتشابه واجهة برمجة تطبيقات JavaScript WebSocket إلى حد كبير بين الإصدارَين القديم والجديد. وكما أشرنا أعلاه، لا ننصح باعتماد مقياس HyBi 00 لأنّه معروف أنّه معرض للهجوم.

ما المتصفِّح الذي يتوافق مع HyBi 10؟

  • يتوافق Chrome 14 مع بروتوكول HyBi 10، على الرغم من أنّ تغييرات WebSocket JavaScript API المذكورة أعلاه ما زالت جارية. ومن المخطط أن يتوافق الإصدار 7 من Firefox أيضًا مع HyBi 10.