Pourquoi n'est-il pas de même de la politique d'origine pour les WebSockets? Pourquoi je peux me connecter ws://localhost?
Je voudrais utiliser les WebSockets pour la communication inter-processus pour mon application (Démon<->WebGUI et le Démon<->FatClient, etc.). Pendant le test, j'ai essayé de la connexion à mon localement web serveur socket (ws://localhost:1234) via le JavaScript client WebSocket sur websocket.org (http://www.websocket.org/echo.html).
Ma question maintenant est:
Pourquoi est-ce possible? N'est-il pas de la croix-origine de la politique mise en œuvre dans les navigateurs (ici: FF29 sur Linux)?
Je demande car si websocket.org était mal, il pourrait essayer de communiquer avec mon local WS serveur et de rediriger tous les messages qu'il reçoit à partir de localhost vers un autre serveur:
Local Serveur WebSocket Navigateur Mal De Serveur Web en ws://localhost:1234 à http://evil.tld | | | | |------[OBTENIR /]--------->| | |<-----[HTML+EvilJS]----| |<------[se connecter ws://..]----| | |<----[de communication]-->| | | |----[le mal de l'avant]---->| | | |
Je n'ai pas testé l'ensemble de cas d'utilisation, mais le connecter à ws://localhost de la JS livrés par websocket.org certainement œuvres.
- websocket.org ne doit pas être mal, Web sockets peut être 😉
Vous devez vous connecter pour publier un commentaire.
oberstet répondu à la question. Merci!!!! Malheureusement je ne peux pas le marquer comme "correct", parce que c'était un commentaire. Le navigateur envoie à "l'origine" de l'en-tête qui peut être vérifiée par l'application.
En Java [1]:
[1] à l'aide de https://github.com/TooTallNate/Java-WebSocket
Pour répondre au "Pourquoi?" de la partie, la raison pour laquelle les navigateurs ne pas appliquer la Même Politique d'Origine (dont la SCRO est une relaxation) pour les WebSockets, par opposition à des appels AJAX, c'est parce que les WebSockets ont été introduites après la valeur de la croix-origine des demandes a été établi, et parce qu'ils ne sont pas soumis aux SOP, pour commencer, la raison historique de la SCRO côté client vérifie ne s'applique pas.
Pour l'AJAX, dans les jours d'une couverture Unique de la Politique d'Origine, les serveurs ne s'attendait authentifié navigateur envoie une requête à partir d'un domaine différent1, et donc n'a pas besoin de nous assurer que la demande venait d'un emplacement de confiance2. Plus tard, les distractions comme la SCRO a avoir côté client vérifications pour éviter les exposer les applications existantes de l'abus en cas de violation de cette hypothèse (en fait un Attaque CSRF).
Si le site Web ont été inventés aujourd'hui, sachant ce que nous savons maintenant, ni SOP, ni de la SCRO serait requis pour l'AJAX et il est possible que la validation est à gauche sur le serveur.
WebSockets, étant une technologie plus récente, sont conçus pour soutenir les scénarios de domaine de l'aller. Quiconque écrit le serveur de la logique devrait être conscient de la possibilité de la croix-origine des demandes et d'effectuer le processus de validation, sans la nécessité pour la main lourde côté navigateur précautions à la SCRO.
1 C'est une simplification. Cross-origin me demande des ressources (y compris les <img>, <lien> et <script> balises) et la soumission d'un formulaire POST demandes ont toujours été autorisés en tant que caractéristique fondamentale du Web. De nos jours, la croix-origine des appels AJAX dont les demandes ont les mêmes propriétés sont également autorisées et connu sous le nom simple croix-de l'origine des demandes. Toutefois, l'accès aux données renvoyées de ces demandes dans le code n'est pas autorisé, sauf si explicitement autorisé par le serveur de la SCRO en-têtes. Aussi, il est de ces "simples" POST demandes qui sont la raison principale pourquoi l'anti-CSRF les jetons sont nécessaires pour les serveurs, afin de se protéger contre les sites web malveillants.
2 En fait, un moyen sécurisé de vérifier la source de la demande n'était pas encore disponibles depuis le
Referer
en-tête peut être usurpée par exemple à l'aide d'un ouvert de redirection de la vulnérabilité. Cela montre aussi comment mal CSRF vulnérabilités ont été compris à l'époque.Origin
en-tête et de fuite privé de l'utilisateur des données de sites tiers comme un résultat. Les Clients de vérifier lesAccess-Control-Allow-Origin
en-tête, comme ils le font avant de permettre JS accès pour les réponses à toutes les autres croix-origine de la requête HTTP sur le web, aurait été une façon simple d'éviter toute cette classe d'attaque (Cross-Site WebSocket Détournement). Trop tard maintenant.WebSockets peut traverser domaine de la communication, et ils ne sont pas limités par la SOP (Même Origine).
Le même problème de sécurité que vous décrivez peut se faire sans les WebSockets.
Le mal JS pouvez:
Si quelque chose injecte javascript dans votre page, ou vous obtenir code javascript malveillant, votre sécurité est déjà cassé.
origin
en-tête qui contient le nom d'hôte du serveur qui a servi le code HTML avec le JS qui a ouvert la connexion WebSocket. Un serveur WebSocket peut alors restreindre l'accès par la vérification deorigin
.