# Guide de sécurité de l'intégration Assurez votre conformité PCI et sécurisez les communications client-serveur. La [norme de sécurité des données de l’industrie des cartes de paiement](https://www.pcisecuritystandards.org/pci_security/) (PCI DSS) est la norme de sécurité mondiale pour toutes les entités qui stockent, traitent ou transmettent le titulaire de la carte ou des données d’authentification sensibles. La norme PCI DSS établit un niveau de protection de base pour les consommateurs et contribue à réduire la fraude et les violations de données dans l’ensemble de l’écosystème de paiement. Toute personne impliquée dans le traitement, la transmission ou le stockage des données de carte doit respecter la PCI DSS. ## Validez votre conformité PCI La conformité PCI est une responsabilité partagée qui s’applique à Stripe et à votre entreprise : - Stripe est certifiée chaque année par un évaluateur de sécurité agréé PCI (QSA) indépendant en tant que prestataires de [services PCI de niveau 1](https://www.visa.com/splisting/searchGrsp.do?companyNameCriteria=stripe,%20inc) répondant à toutes les normes PCI. - En tant qu’entreprise qui accepte des paiements, vous devez le faire dans le respect des normes PCI et attester chaque année de cette conformité. Vérifiez les exigences en matière de documentation pour votre entreprise dans votre [Dashboard](https://dashboard.stripe.com/settings/compliance/documents) et consultez ce guide pour découvrir comment Stripe peut vous aider à vous conformer à la norme PCI. ## Utiliser des intégrations à faible risque Certains modèles opérationnels exigent la saisie de numéros PAN non tokenisés sur une page de paiement. Si votre entreprise traite directement des données sensibles relatives aux cartes de crédit lors de l’acceptation des paiements, vous pourriez être tenu de respecter plus de 300 contrôles de sécurité dans le cadre de la norme PCI DSS. Cela pourrait vous obliger à acheter, mettre en œuvre et entretenir des logiciels et du matériel de sécurité dédiés, et à engager des auditeurs externes pour vous aider à satisfaire à vos exigences en matière d’évaluation annuelle. De nombreux modèles économiques n’ont pas besoin de se charger des données sensibles des cartes. Vous pouvez plutôt utiliser l’une de nos [intégrations de paiement](https://docs.stripe.com/payments.md) à faible risque pour collecter et transmettre en toute sécurité les informations de paiement directement à Stripe sans qu’elles passent par vos serveurs, ce qui réduit vos obligations PCI. ### Données de carte hors de portée que vous pouvez stocker en toute sécurité Stripe renvoie des informations de carte non sensibles en réponse à une demande de paiement. Il s’agit du type de carte, de ses quatre derniers chiffres et de sa date d’expiration. Ces données ne sont pas soumises à la conformité PCI, vous pouvez donc les stocker dans votre base de données. De plus, vous pouvez stocker toute donnée renvoyée par notre [API](https://docs.stripe.com/api.md). ## Utilisez les protocoles TLS et HTTPS TLS désigne le processus de transmission sécurisée des données entre le client (l’application ou le navigateur que votre client utilise) et votre serveur. Le protocole SSL (Secure Sockets Layer) effectuait cette fonction initialement, mais il est maintenant obsolète et n’est plus suffisamment sécurisé. Il a donc été remplacé par le protocole TLS, mais le terme *SSL* est encore parfois utilisé pour faire référence au protocole TLS et sa fonction de transmission sécurisée des données. Les pages de paiement doivent utiliser une version récente (TLS 1.2 ou supérieure) puisque cela réduit de façon importante le risque que vous ou vos clients soyez victimes d’attaques d’intercepteurs. Le protocole TLS vise à : - Chiffrez le trafic entre le client et votre serveur et vérifiez-en l’intégrité. - Vérifiez que le client communique avec le bon serveur. En pratique, cela signifie généralement que le propriétaire du domaine et le propriétaire du serveur sont la même entité. Cela contribue à éviter les attaques d’intercepteurs. Sans cela, vous n’avez aucune garantie que vous chiffrez le trafic vers la bonne destination. Assurez-vous que toutes les ressources (par exemple, JavaScript, CSS et images) sont également traitées au moyen du protocole TLS pour éviter que vos clients ne voient un [avertissement de contenu mixte](https://web.dev/what-is-mixed-content/) dans le navigateur. L’utilisation du protocole TLS nécessite un *certificat numérique*, un fichier émis par une autorité de certification (AC). L’installation de ce certificat garantit au client qu’il communique réellement avec le serveur auquel il est censé s’adresser, et non pas avec un imposteur. Procurez-vous un certificat numérique auprès d’un fournisseur de certificat réputé, tel que : - [Let’s Encrypt](https://letsencrypt.org/) - [DigiCert](https://www.digicert.com/tls-ssl/basic-tls-ssl-certificates) - [NameCheap](https://www.namecheap.com/security/ssl-certificates.aspx) Si nécessaire, vous pouvez [tester votre intégration](https://docs.stripe.com/testing.md) sans utiliser le protocole HTTPS, et l’activer au moment de commencer à accepter des paiements réels. Cependant, toutes les interactions entre votre serveur et Stripe doivent utiliser HTTPS (lorsque vous utilisez nos bibliothèques). ### Configurez le protocole TLS Pour configurer le protocole TLS : 1. Achetez un certificat auprès d’un fournisseur approprié. 1. Configurez votre serveur pour qu’il utilise le certificat. Cette étape est complexe, alors suivez le guide d’installation du fournisseur de services que vous utilisez. Puisque le protocole TLS est constitué d’une suite complexe d’outils cryptographiques, certains détails peuvent vous échapper. Nous vous recommandons d’utiliser le [test de serveur SSL](https://www.ssllabs.com/ssltest/) de Qualys SSL Labs pour vérifier que tout est configuré de façon sécurisée. ## Considérations de sécurité L’ajout de JavaScript depuis d’autres sites rend votre sécurité dépendante de la leur et pose un risque pour la sécurité. Si ces sites sont compromis, un attaquant pourrait parvenir à exécuter du code arbitrairement sur votre page. En pratique, de nombreux sites utilisent JavaScript pour faire fonctionner des services comme Google Analytics, même sur des pages sécurisées. Néanmoins, nous vous recommandons d’en minimiser l’ajout. Si vous utilisez des points de rappel Web *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests), utilisez TLS pour le point de terminaison afin d’éviter que le trafic soit intercepté et que les notifications soient modifiées (les informations sensibles ne sont jamais incluses dans un événement du point de rappel Web). Vous devez également [vérifier les signatures des points de rappel Web](https://docs.stripe.com/webhooks.md#verify-official-libraries) et [ajouter les adresses IP de Stripe à la liste blanche](https://docs.stripe.com/ips.md) afin de vous assurer que chaque point de rappel Web Stripe que vous recevez est envoyé exclusivement par Stripe. Bien qu’il soit important de respecter les normes de sécurité des données, votre approche de la sécurité ne doit pas s’arrêter là. Voici quelques ressources intéressantes pour en savoir plus sur la sécurité du Web : - [OWASP](https://owasp.org/) - [SANS](https://www.sans.org/reading-room/) - [NIST](http://csrc.nist.gov/) ### Politique de sécurité du contenu Si vous avez mis en place une *politique de sécurité du contenu* (Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, including Cross-Site Scripting (XSS) and data injection attacks), l’ensemble des directives requises par Checkout, les composants intégrés Connect et Stripe.js sont les suivantes : #### Checkout - `connect-src`, `https://checkout.stripe.com` - `frame-src`, `https://checkout.stripe.com` - `script-src`, `https://checkout.stripe.com` - `img-src`, `https://*.stripe.com` #### Connecter les composants intégrés - `frame-src` `https://connect-js.stripe.com` `https://js.stripe.com` - `img-src` `https://*.stripe.com` - `script-src` `https://connect-js.stripe.com` `https://js.stripe.com` - `style-src` `sha256-0hAheEzaMe6uXIKV4EehS9pu1am1lj/KnnzrOYqckXk=` (SHA de l’élément de style vide) Si vous utilisez un fichier CSS pour charger des [polices Web](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#fonts-object) afin de les utiliser avec des composants intégrés Connect, l’adresse URL doit être autorisée par votre politique de sécurité du contenu [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src). #### Stripe.js - `connect-src`, `https://api.stripe.com`, `https://maps.googleapis.com` - `frame-src`, `https://*.js.stripe.com`, `https://js.stripe.com`, `https://hooks.stripe.com` - `script-src`, `https://*.js.stripe.com`, `https://js.stripe.com`, `https://maps.googleapis.com` > L’ajout de `*.js.stripe.com`. js permet à Stripe d’améliorer les performances en démarrant les cadres à des origines différentes, lorsque cela est possible. Si vous utilisez un fichier CSS pour charger des [polices Web](https://docs.stripe.com/js.md#stripe_elements) à utiliser avec Elements, son URL doit être autorisée par votre politique de sécurité du contenu [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src). Si vous utilisez un moyen de paiement associé à des fonctionnalités de redirection (par exemple, des cartes qui pourraient exiger 3D Secure ou iDeal), ajoutez `https://hooks.stripe.com` en tant que directive `frame-src`. Si vous utilisez le composant [Address Element](https://docs.stripe.com/elements/address-element.md) avec votre propre clé API Google Maps , incluez `https://maps.googleapis.com` en tant que connect-src et script-directive. Pour découvrir les dernières exigences en matière de sécurité du contenu (CSP), consultez le [guide officiel de l’API Google Maps](https://developers.google.com/maps/documentation/javascript/content-security-policy). Si vous utilisez [Trusted Types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for), vous devez autoriser le chargement de scripts dynamiques à partir de `https://js.stripe.com` et `https://*.js.stripe.com`. Vous pouvez utiliser l’exemple suivant de [politique par défaut](https://w3c.github.io/webappsec-trusted-types/dist/spec/#default-policy-hdr) pour effectuer cette opération : ```javascript trustedTypes.createPolicy('default', { createScriptURL: (input) => { const stripeURL = /^https:\/\/([a-z0-9-]+\.)?js\.stripe\.com$/; const origin = new URL(input).origin; if (stripeURL.test(origin)) { return input; } return undefined; }, }); ``` ### Prise en charge de l’isolation d’origine croisée À l’heure actuelle, nous ne prenons pas en charge les *sites isolés d’origine croisée* (Cross-origin isolation is an opt-in security feature that helps prevent side-channel attacks by ensuring that a document loads in a unique, isolated browsing environment). L’isolation d’origine croisée nécessite la prise en charge de toutes les dépendances, et plusieurs dépendances clés qui activent nos offres de paiement ne prennent pas encore en charge cette fonctionnalité. ## See also - [Conformité à la norme PCI DSS](https://stripe.com/guides/pci-compliance) - [Bonnes pratiques en matière de gestion des clés API secrètes](https://docs.stripe.com/keys-best-practices.md) - [Liens de rappel Web](https://docs.stripe.com/webhooks.md) - [Refus et échecs de paiement](https://docs.stripe.com/declines.md) - [Aperçu des litiges](https://docs.stripe.com/disputes.md)