Wat is er anders in het nieuwe WebSocket-protocol

De specificatie van het WebSocket-protocol is onlangs bijgewerkt om eerdere beveiligingsproblemen op te lossen en is grotendeels stabiel. Hieronder vindt u een overzicht van de wijzigingen, samen met enkele opmerkingen over de huidige implementaties.

Wat is er veranderd sinds WebSocket HyBi 00?

  • Het protocolframeformaat is gewijzigd. HyBi 00 gebruikte voorheen "0x00" voor de kop en "0xff" voor de staart van elk frame. HyBi 10 gebruikt nu een nieuw formaat, zoals hieronder:
      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 ...                |
     +---------------------------------------------------------------+

Er zijn beveiligingsproblemen aangepakt

  • Sec-WebSocket-Key en Sec-WebSocket-Accept worden toegevoegd in plaats van de drie sleutels van HyBi 00. De browser geeft een willekeurig gegenereerd nummer aan Sec-WebSocket-Key . Vervolgens gebruikt de server dit met de specifieke GUID van het WebSocket-protocol ( 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 ) en SHA1/BASE64, enz. om Sec-WebSocket-Accept te retourneren, zodat de browser kan bevestigen dat hij WebSocket begrijpt. Dit voorkomt een cross-protocol aanval.
  • Framemaskering is nu vereist voor elk frame. Dit voorkomt cachevergiftiging op proxyservers. Sec-WebSocket-Origin is toegevoegd om toegang te voorkomen via scripts waarvan de serviceprovider niet op de hoogte is.
  • Sec-WebSocket-Origin is toegevoegd ter vervanging van de Origin-sleutel van HyBi 00 om toegang te voorkomen vanuit scripts waarvan de serviceprovider niet op de hoogte is. Let op: dit zal in HyBi 11 gewoon " Origin " zijn.

JS API-wijzigingen

  • subprotocol kan nu een array zijn, waardoor een methodehandtekening van new WebSocket(String url, Array subprotocol) mogelijk is
  • .protocol kenmerk [Tekenreeks]
  • .binaryType -kenmerk [Blob|ArrayBuffer]
  • .extension [Tekenreeks]
  • Statuscode en reden (waarom de verbinding wordt verbroken) zijn toegevoegd aan CloseEvent . De functie close() is ook aangepast om deze twee argumenten te accepteren.

Uitbreidingen

  • Sec-WebSocket-Extensions is toegevoegd. De voorgestelde extensies zijn:
  • deflate-frame zorgt ervoor dat frames bij de bron worden gecomprimeerd en bij de bestemming worden geëxtraheerd.
  • x-google-mux om multiplexing te ondersteunen, maar bevindt zich nog in een vroeg stadium.

Is er compatibiliteit tussen HyBi 00 en HyBi 10 op zowel de server- als de browserimplementatie?

  • Serverimplementaties kunnen zowel HyBi 00 als HyBi 10 ondersteunen door naar de handshake HTTP-header te kijken. Het wordt echter afgeraden om HyBi 00 te ondersteunen, omdat bekend is dat het kwetsbaar is.
  • De WebSocket JavaScript API is grotendeels vergelijkbaar tussen oude en nieuwe versies. Maar zoals hierboven vermeld, raden we ondersteuning voor HyBi 00 af, omdat bekend is dat deze kwetsbaar is.

Welke browsers ondersteunen HyBi 10?

  • Chrome 14 ondersteunt het HyBi 10-protocol, hoewel de bovengenoemde wijzigingen in de WebSocket JavaScript API nog in de maak zijn. Firefox 7 zal naar verwachting ook HyBi 10 ondersteunen.