Wat is er anders in het nieuwe WebSocket-protocol

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

Wat is er veranderd sinds WebSocket HyBi 00?

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

Beveiligingsproblemen zijn aangepakt

  • Sec-WebSocket-Key en Sec-WebSocket-Accept zijn 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 het 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.
  • Op elk frame is nu framemaskering vereist. Dit voorkomt cachevergiftiging op proxy. Sec-WebSocket-Origin is toegevoegd om toegang te voorkomen van scripts waarvan de serviceprovider niet op de hoogte is.
  • Sec-WebSocket-Origin wordt toegevoegd in plaats van de Origin-sleutel van HyBi 00 om toegang te voorkomen door scripts waarvan de serviceprovider niet op de hoogte is. Merk op dat dit gewoon " Origin " is op HyBi 11.

JS API-wijzigingen

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

Extensies

  • Sec-WebSocket-Extensions is toegevoegd. Voorgestelde uitbreidingen zijn:
  • deflate-frame maakt frames gecomprimeerd bij de bron en geëxtraheerd op de bestemming.
  • x-google-mux om multiplexing te ondersteunen, maar bevindt zich in een vroeg stadium.

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

  • Serverimplementaties kunnen zowel HyBi 00 als HyBi 10 ondersteunen door naar de handshake HTTP-header te kijken. Het wordt echter niet aanbevolen 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 niet aan om HyBi 00 te ondersteunen, omdat bekend is dat het kwetsbaar is.

Welke browser ondersteunt HyBi 10?

  • Chrome 14 ondersteunt het HyBi 10-protocol, hoewel de hierboven genoemde WebSocket JavaScript API-wijzigingen nog onderweg zijn. Firefox 7 is ook gepland om HyBi 10 te ondersteunen.