2010-07-29 6 views
6

Dites qu'il ya un site foo.com qui charge JavaScript à partir du site bar.com. Maintenant, dites le JavaScript du site bar.com essaie de lire les cookies en utilisant document.cookies. J'avais l'impression qu'en utilisant JavaScript, vous pouvez lire tous les cookies mis en place dans le navigateur, quelle que soit leur source. Mais il s'avère que le JavaScript du site bar.com ne peut accéder aux cookies que par bar.com et aucun autre. Si tel est le cas, comment les attaques par injection de script qui volent les cookies sont-elles effectuées?JavaScript et les cookies tiers

Répondre

5

Mais il s'avère que le JavaScript du site bar.com ne peut accéder qu'aux cookies mis en place par bar.com et pas les autres.

Ce n'est pas vrai. Ce qui compte, c'est l'emplacement du document HTML contenant l'élément <script>, pas l'URL du fichier JS qui a indiqué <script> dans l'attribut src.

Je soupçonne que votre problème est que vous accédez document.cookies lorsque la propriété est appelée document.cookie (Singulier!)

+0

Voilà aussi comment les CDN fonctionnent, comme le script jQuery qui est chargé sur ce site: 'http: // ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js' ne fonctionne pas en direct sur le domaine 'stackoverflow.com'. –

+0

@David, cookie chose était une faute d'orthographe tout en tapant la question. Je viens juste d'essayer avec alert (document.cookie) et je reçois juste une chaîne vide malgré la mise en place des cookies. Je suis assez déconcerté. – roger

+0

J'ai effectué un test. Le domaine ne fait pas différent. Peut-être que les cookies que vous essayez d'extraire sont sur un chemin différent, ou configurés pour être uniquement HTTP. – Quentin

3

Ils chargent les scripts à l'intérieur de la page attaquée. Par exemple, lorsque les commentaires d'un système de blog sont compromis, ils contiennent un élément script exécuté lors du rendu de la page. Ce script peut récupérer les cookies et les envoyer au serveur de l'attaquant.

C'est pourquoi vous devriez jamais entrée utilisateur de confiance et de désavouer certaines balises au moins dans les commentaires (ou traduire tous les <-&lt;). Mais ne le faites pas du côté des clients, car cette technique de prévention peut facilement être contournée; tester (et modifier) ​​l'entrée malveillante du côté serveur.

3

Vous ne pouvez accéder aux cookies qui ont été fixés pour le nom de domaine donné. De l'Wikipedia article on cookies:

A côté de la paire nom/valeur, un cookie peut également contenir une date d'expiration, un chemin , un nom de domaine, et si le cookie est destiné uniquement pour les connexions cryptées. RFC 2965 mandats cookies ont un numéro de version, mais c'est généralement omis. Ces éléments de données suivent la paire name = newvalue et sont séparés par des points-virgules. Par exemple, un cookie peut être créé par le serveur en envoyant une ligne Set-Cookie: name = newvalue; expire = date; chemin = /; domain = .exemple.org.

Le domaine et chemin dire au navigateur que le cookie doit être envoyé au serveur lors demandant des URL d'un domaine donné et le chemin . Si ce n'est pas spécifié, ils ont par défaut pour le domaine et le chemin de l'objet qui a été demandé. Par conséquent, les chaînes de domaine et de chemin d'accès peuvent indiquer au navigateur d'envoyer le cookie alors qu'il ne le ferait normalement pas en .Pour des raisons de sécurité, le cookie n'est accepté que si le serveur est membre du domaine spécifié par la chaîne de domaine.

Si foo.com envoyé un cookie qui avait le nom de domaine de bar.com, ou même .com, puis le code javascript sur bar.com pourrait lire ce cookie. Cependant, la plupart des navigateurs sont configurés pour n'accepter que les cookies lorsque le nom de domaine correspond, et rejetteraient un tel cookie.

+0

J'ai vérifié que le cookie est présent mais JavaScript n'est pas capable de le lire. – roger