מה שונה בפרוטוקול 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. הפעולה הזו מונעת התקפת פרוטוקולים שונים.
  • עכשיו צריך לבצע אנונימיזציה של פריימים בכל מסגרת. הפעולה הזו מונעת הרעלת מטמון בשרת proxy. הוספנו את 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 כי הוא ידוע כפגיע.
  • ה-WebSocket JavaScript API דומה במידה רבה בין הגרסה הישנה לחדשה. אבל כפי שצוין למעלה, אנחנו לא ממליצים לתמוך ב-HyBi 00 כי הוא ידוע כפגיע.

איזה דפדפן תומך ב-HyBi 10?

  • ב-Chrome 14 יש תמיכה בפרוטוקול HyBi 10, למרות שהשינויים שנעשו ב-WebSocket JavaScript API שצוינו למעלה עדיין בדרך. Firefox 7 מתוכנן גם לתמוך ב-HyBi 10.