web-dev-qa-db-fra.com

Est-il sûr d'utiliser $ .support.cors = true; dans jQuery?

J'essayais de frapper un service Web sur un domaine différent en utilisant la méthode ajax de jQuery. Après avoir fait des recherches, il semble que cela ne soit pas autorisé par la conception pour empêcher les scripts intersites.

Je suis tombé sur un travail autour qui devait inclure cette ligne:

$.support.cors = true;

en haut de mon code javascript. D'après ce que je comprends, cela permet un scriptage intersite dans jQuery.

Le fait d'avoir cette ligne de code rend-il mon site plus vulnérable aux attaques? J'ai toujours entendu parler de XSS comme d'un problème de sécurité, y a-t-il des utilisations légitimes pour XSS?

52
Abe Miessler

XSS n'est pas une fonctionnalité qui peut être activée dans jQuery. Il serait très très inhabituel si le noyau jQuery avait une vulnérabilité XSS, mais c'est possible et son appelé XSS basé sur DOM =.

"Partage de ressources d'origine croisée" ou CORS n'est pas la même chose que XSS, [~ # ~] mais [~ # ~] , mais si un une application Web avait une vulnérabilité XSS, alors un attaquant aurait un accès de type CORS à toutes les ressources de ce domaine. En bref, CORS vous donne le contrôle sur la façon dont vous cassez la même politique d'origine de sorte que vous n'avez pas besoin d'introduire une vulnérabilité complète sur XSS.

Le $.support.cors la fonction de requête repose sur le Access-Control-Allow-Origin En-tête de réponse HTTP. Ceci pourrait être une vulnérabilité. Par exemple, si une application Web avait Access-Control-Allow-Origin: * sur chaque page, un attaquant aurait alors le même niveau d'accès qu'une vulnérabilité XSS. Faites attention aux pages que vous introduisez les en-têtes CORS et essayez d'éviter * autant que possible.

Donc pour répondre à votre question: [~ # ~] non [~ # ~] une application web n'a jamais besoin d'introduire une vulnérabilité XSS car il y a moyen de contourner les SOP tels que CORS/jsonp/proxy inter-domaines/ access-control-Origin .

35
rook

Cela ne peut aider que si CORS est activé dans votre navigateur, mais il n'est pas encore pris en charge par jQuery:

Pour activer les demandes interdomaines dans des environnements qui ne prennent pas encore en charge les cors mais autorisent les demandes XHR interdomaines (gadget Windows, etc.), définissez $ .support.cors = true ;. CORS WD

Le simple fait de définir cette propriété sur true ne peut pas entraîner de vulnérabilité de sécurité.

11
bjornd

Lorsqu'un pirate est en mesure d'injecter du code de script pour modifier les demandes vers un autre domaine, il est également en mesure de définir cet indicateur javascript dans le script.

Donc, si ce drapeau est défini, cela ne change pas grand-chose à ce stade de l'intrusion.

3
Tim