Security-sensitive components, such as single sign-on APIs, need to be safely deployed on untrusted webpages. We present several new attacks on security components used in popular web applications that demonstrate how failing to isolate such components leaves them vulnerable to attacks both from the hosting website and other components loaded on the same page. These attacks are not prevented by browser security mechanisms alone, because they are caused by code interacting within the same origin. To mitigate these attacks, we propose to combine fine-grained component isolation at the JavaScript level with cryptographic mechanisms. We present Defensive JavaScript (DJS), a subset of the language that guarantees the behavioral integrity of trusted scripts loaded in an untrusted page. We give a sound type system, type inference tool and build defensive libraries for cryptography and data encodings. We show the effectiveness of our solution by implementing several isolation patterns that fix some of our original attacks. We use a translation of a fragment of DJS to to applied pi-calculus to verify concrete security policies of critical components against various classes of web attackers.Certaines librairies critiques pour la sécurité, par exemple pour l'authentification unique (single sign-on), nécéssitent d'être chargées dans des sites tiers non sûrs. Nous montrons comment le manque d'isolation entre ces librairies et leur page hôte les rendent vulnérables aux scripts tiers qui partagent le même environnement, y compris pour des services très largements utilisés. Les mécanismes de sécurité des navigateurs sont impuissants face à ces attaques car elles interviennent en dessous de la granularité des politiques de sécurité, fixée par origine (protocole, nom de domaine et numéro de port). Afin de mitiger ces attaques, nous proposons de combiner une isolation fine de ces librairies au niveau du langage avec des protections cryptographiques. À cette fin, nous introduisons DJS, un fragment de JavaScript qui protège l'intégrité de l'exécution d'un script dans un environnement JavaScript hostile. Nous nous appuyons sur un système de types inférables et sur un ensemble de librairies (elles-même bien typées) pour implémenter des solutions génériques aux attaques que nous avons découvertes. Nous vérifions la validité de ces schémas à l'aide d'une traduction d'un sous-ensemble de DJS vers le pi-calcul appliqué contre différent types d'attaques