web-dev-qa-db-fra.com

les websockets sont-ils sécurisés ou non?

wikipedia semble inférer que websockets sont sécurisés:

Pour la prise en charge du navigateur Web, une version sécurisée du protocole WebSocket est implémentée dans Firefox 6 (nommé MozWebSocket), [2] Google Chrome 14 [3] et aperçu du développeur Internet Explorer 10. ... Bien qu'il n'y ait aucun exploit connu, il a été désactivé dans Firefox 4 et 5 ...

mais w déclare qu'ils ne sont pas sûrs:

Suivre les procédures HTTP ici pourrait introduire de sérieux problèmes de sécurité dans un contexte de navigateur Web. Par exemple, considérez un hôte avec un serveur WebSocket sur un chemin et un redirecteur HTTP ouvert sur un autre. Du coup, tout script auquel on peut attribuer une URL WebSocket particulière peut être amené à communiquer (et éventuellement à partager des secrets avec) n'importe quel hôte sur Internet, même si le script vérifie que l'URL a le bon nom d'hôte.
  1. sont http websockets (ws :) sécurisé ou non?

  2. sont https websockets (wss :) sécurisé ou non?

  3. sinon # 2, y a-t-il des mesures prophylactiques documentées?

44
cc young

La sécurité WebSocket comporte de nombreux aspects différents.

L'extrait de wikipedia que vous avez cité fait référence au masquage du client WebSocket en données de serveur. Il s'agit de protéger les intermédiaires qui se comportent mal (par exemple, les mandataires et les caches) contre l'interprétation accidentelle du trafic WebSocket comme du trafic HTTP normal. Le danger ici est que le protocole WebSockets pourrait être utilisé pour empoisonner l'intermédiaire de mise en cache. Cependant, je dois noter que c'était une préoccupation purement théorique, mais c'était assez une préoccupation que Mozilla et Opera étaient réticents à expédier les versions Hixie et les premières HyBi du protocole WebSocket. L'IETF a décidé d'ajouter le client au serveur de masquage des données pour résoudre le problème.

Par ailleurs, l'IETF est responsable du protocole WebSocket (IETF 6455) tandis que le W3C est responsable de l'API HTML5 WebSocket (l'objet Javascript, les méthodes et les événements).

Un autre aspect de la sécurité WebSocket est la sécurité multi-origine. Le deuxième extrait de code que vous avez cité à partir de la spécification de l'API W3C WebSocket est lié à la sécurité multi-origine. Les WebSockets prennent en charge les connexions entre origines (vers un hôte différent à partir duquel la page HTML a été servie). Cet avertissement indique que si des procédures HTTP croisées d'origine normales avaient été utilisées pour les WebSockets, cela ouvrirait un énorme trou de sécurité. Cependant, la procédure WebSocket est différente pour exactement cette raison. D'une part, la négociation et la réponse WebSocket sont conçues de manière à ce que les connexions WebSocket ne puissent pas être établies avec un serveur HTTP qui ne prend pas en charge les connexions WebSocket: le serveur doit signer/hacher une clé d'une manière spécifique à WebSocket et la renvoyer dans la réponse de la négociation. La deuxième partie est que le navigateur doit envoyer un en-tête Origin dans le cadre de la poignée de main (cela indique où le HTML/Javascript a été chargé à l'origine). Cela permet au serveur de choisir les domaines qu'il autorisera à établir les connexions WebSocket.

Enfin, il existe deux modes de connexion WebSocket: non chiffré (ws: //) et chiffré (wss: //). Le mode crypté utilise le cryptage TLS/SSL pour crypter toutes les données envoyées vers et depuis le serveur (y compris la poignée de main initiale et la réponse). Il s'agit du même mécanisme de cryptage utilisé pour les connexions HTTPS (et utilise le même moteur de cryptage dans le navigateur). Cela empêche les tiers d'espionner les données transférées.

Il n'y a vraiment que deux versions du protocole WebSocket à connaître:

  • Hixie76: Cette version du protocole a ajouté une sécurité cross-Origin et un hachage/signature d'en-tête. Cependant, en raison de la conception du protocole, il est difficile d'ajouter sa prise en charge aux serveurs Web existants. Il s'agit de la version actuellement prise en charge dans iOS (avec un peu de chance, iOS 6 sera enfin mis à jour vers IETF 6455)

  • IETF 6455: Il s'agit de la version du protocole WebSocket normalisée par l'IETF en novembre dernier (novembre 2011). C'était l'aboutissement des travaux du groupe de travail IETF HyBi (les itérations du protocole qui y a conduit ont été étiquetées HyBi XX). Il s'agit de la version prise en charge par les versions actuelles de Chrome et Firefox et également par IE 10 et bientôt Opera.

73
kanaka

La version hixie-76 du protocole WebSocket est plus sécurisée que les versions antérieures, et la version hybi-07 est encore plus sécurisée. À la version hixie-76 est ajoutée protection contre les fausses demandes . À la version hybi-07 est ajoutée masquage de message .

12
Denis Ibaev