# Guía de seguridad de la integración Garantiza el cumplimiento de la normativa PCI y protege las comunicaciones entre el cliente y el servidor. El [Estándar de seguridad de datos del sector de tarjetas de pago](https://www.pcisecuritystandards.org/pci_security/) (PCI DSS) es el estándar de seguridad global para todas las entidades que almacenan, procesan o transmiten datos del titular de la tarjeta o datos confidenciales de autenticación. El PCI DSS establece un nivel básico de protección para los consumidores y ayuda a reducir el fraude y las filtraciones de datos en todo el ecosistema de pagos. Cualquier persona involucrada en el procesamiento, la transmisión o el almacenamiento de datos de tarjetas debe cumplir con el PCI DSS. ## Cómo validar el cumplimiento de la normativa PCI El cumplimiento de la normativa PCI es una responsabilidad compartida y se aplica tanto a Stripe como a tu empresa: - Stripe está certificado anualmente por un evaluador independiente de seguridad certificado conforme a la normativa PCI como proveedor de servicios de [nivel 1 de PCI](https://www.visa.com/splisting/searchGrsp.do?companyNameCriteria=stripe,%20inc) que cumple con todos los requisitos de PCI. - Como empresa que acepta pagos, debes hacerlo de conformidad con la normativa PCI y certificar anualmente este cumplimiento. Revisa los requisitos de la documentación para tu empresa en tu [Dashboard](https://dashboard.stripe.com/settings/compliance/documents) y sigue leyendo esta guía para saber cómo Stripe puede ayudarte a cumplir con la normativa PCI. ## Utiliza integraciones de bajo riesgo Algunos modelos de negocio requieren la introducción de números PAN no tokenizados en una página de pagos. Si tu empresa maneja datos confidenciales de tarjetas de crédito directamente al aceptar pagos, es posible que debas cumplir más de 300 controles de seguridad de PCI DSS. Esto puede obligarte a adquirir, implementar y actualizar software y hardware de seguridad específicos, así como a contratar auditores externos para cumplir con los requisitos de evaluación anual. Muchos modelos de negocio no necesitan manejar datos confidenciales de tarjetas. En su lugar, puedes usar una de nuestras [integraciones de pagos](https://docs.stripe.com/payments.md) de bajo riesgo para recopilar y transmitir de forma segura la información de pago directamente a Stripe sin que pase por tus servidores, lo que reduce tus obligaciones de PCI. ### Datos de tarjetas fuera del ámbito de aplicación que puedes almacenar de forma segura Stripe devuelve datos de tarjeta no confidenciales en la respuesta a una solicitud de cargo. Esto incluye el tipo de tarjeta, los últimos cuatro dígitos de la tarjeta y la fecha de caducidad. Esta información no está sujeta al cumplimiento de la normativa PCI, de manera que puedes almacenar cualquiera de estas propiedades en tu base de datos. Además, puedes almacenar todo lo que recibas de nuestra [API](https://docs.stripe.com/api.md). ## Cómo usar TLS y HTTPS TLS es el proceso de transmisión segura de datos entre el cliente (la aplicación o el navegador que usa tu cliente) y tu servidor. Al principio, de esto se ocupaba el protocolo Secure Sockets Layer (SSL), pero está obsoleto y ya no es seguro. TLS reemplazó a SSL, pero el término *SSL* sigue utilizándose coloquialmente cuando se refiere a TLS y su función para proteger los datos transmitidos. Las páginas de pagos deben usar una versión reciente (TLS 1.2 o superior) porque reduce significativamente el riesgo de ataques de intermediarios tanto para ti como para tus clientes. TLS intenta lograr lo siguiente: - Cifrar y verificar la integridad del tráfico entre el cliente y tu servidor. - Comprueba que el cliente se comunique con el servidor correcto. En la práctica, esto implica verificar que el propietario del dominio y el propietario del servidor son la misma persona. De esta manera, se evitan los ataques de intermediario. Sin esta verificación, no hay garantía de que estés cifrando el tráfico al destinatario correcto. Asegúrate de que los recursos (por ejemplo, JavaScript, CSS e imágenes) también se muestren a través de TLS para evitar que tus clientes vean una [advertencia de contenido mixto](https://web.dev/what-is-mixed-content/) en su navegador. El uso de TLS requiere un *certificado digital*, un archivo emitido por una autoridad de certificación (AC). La instalación de este certificado asegura al cliente que realmente se está comunicando con el servidor con el que espera estar hablando, y no con un impostor. Obtén un certificado digital de un proveedor de certificados de buena reputación, como: - [Vamos a cifrar](https://letsencrypt.org/) - [DigiCert](https://www.digicert.com/tls-ssl/basic-tls-ssl-certificates) - [NameCheap](https://www.namecheap.com/security/ssl-certificates.aspx) Puedes [probar tu integración](https://docs.stripe.com/testing.md) sin usar HTTPS si es necesario y habilitarlo cuando todo esté listo para aceptar cargos reales. No obstante, todas las interacciones entre tu servidor y Stripe deben usar HTTPS (es decir, al usar nuestras bibliotecas). ### Configurar TLS Para configurar TLS: 1. Compra un certificado de un proveedor adecuado. 1. Configure el servidor para usar el certificado. Este paso es complejo, así que sigue la guía de instalación del proveedor que utilices. Como se trata de un conjunto complejo de herramientas de cifrado, es fácil pasar por alto algunos detalles. Te recomendamos usar la [prueba de servidor SSL](https://www.ssllabs.com/ssltest/) de Qualys SSL Labs para asegurarte de haber configurado todo de manera segura. ## Consideraciones de seguridad Incluir JavaScript desde otros sitios web hace que tu seguridad dependa de la de estos sitios y supone un riesgo de seguridad. Si son víctimas de un ataque alguna vez, un atacante podría ejecutar código arbitrario en tu página. En la práctica, muchos sitios utilizan JavaScript para servicios como Google Analytics, incluso en páginas seguras. Sin embargo, recomendamos intentar minimizarlo. Si utilizas *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests), utiliza TLS para el punto de conexión con el fin de evitar que el tráfico se intercepte y se alteren las notificaciones (la información confidencial nunca se incluye en un evento webhook). También debes [verificar las firmas de los webhooks](https://docs.stripe.com/webhooks.md#verify-official-libraries) e [incluir en la lista blanca las direcciones IP de Stripe](https://docs.stripe.com/ips.md) para asegurarte de que todos los webhooks de Stripe que recibas sean enviados exclusivamente por Stripe. Aunque es importante cumplir con las normas de seguridad de los datos, las cuestiones sobre seguridad no terminan ahí. A continuación encontrarás recursos interesantes para saber más sobre seguridad en la web: - [OWASP](https://owasp.org/) - [SANS](https://www.sans.org/reading-room/) - [NIST](http://csrc.nist.gov/) ### Política de seguridad de contenidos Si has implementado una *Política de seguridad de contenido* (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), este es el conjunto completo de directivas que Checkout, los componentes integrados de Connect y Stripe.js requieren: #### Checkout - `connect-src`, `https://checkout.stripe.com` - `frame-src`, `https://checkout.stripe.com` - `script-src`, `https://checkout.stripe.com` - `img-src`, `https://*.stripe.com` #### Componentes integrados de Connect - `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 del elemento de estilo vacío) Si utilizas un archivo CSS para cargar [fuentes web](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#fonts-object) con el fin de utilizarlas con componentes integrados de Connect, tu directiva CSP [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src) debe autorizar su URL. #### 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` > Añadir `*.js.stripe.com` permite a Stripe.js mejorar el rendimiento iniciando fotogramas en diferentes orígenes, siempre que sea posible. Si utilizas un archivo CSS para cargar [fuentes web](https://docs.stripe.com/js.md#stripe_elements) con el fin de usarlas con Elements, su URL debe ser autorizada por tu directiva [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src) de la política de seguridad de contenido (CSP). Si usas un método de pago con funciones de redireccionamiento (por ejemplo, tarjetas que pueden requerir 3D Secure o iDeal), incluye `https://hooks.stripe.com` como una directiva `frame-src`. Si utilizas el [Address Element](https://docs.stripe.com/elements/address-element.md) con tu propia clave de la API de Google Maps, incluye `https://maps.googleapis.com` como una directiva connect-src y script-src. Consulta la [guía oficial de la API de Google Maps](https://developers.google.com/maps/documentation/javascript/content-security-policy) para conocer el requisito de CSP más reciente. Si utilizas [Trusted Types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for), debes permitir que se carguen scripts dinámicos desde `https://js.stripe.com` y `https://*.js.stripe.com`. Puedes usar el siguiente ejemplo de [política predeterminada](https://w3c.github.io/webappsec-trusted-types/dist/spec/#default-policy-hdr) para habilitarla: ```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; }, }); ``` ### Aceptación de aislamiento de origen cruzado Actualmente, no aceptamos *sitios web aislados de origen cruzado* (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). El aislamiento de origen cruzado requiere el soporte de todas las dependencias, y varias dependencias clave que habilitan nuestras ofertas de pago todavía no proporcionan soporte para esta función. ## See also - [Cumplimiento de la normativa PCI DSS](https://stripe.com/guides/pci-compliance) - [Prácticas recomendadas para gestionar claves de API secretas](https://docs.stripe.com/keys-best-practices.md) - [Webhooks](https://docs.stripe.com/webhooks.md) - [Rechazos y pagos fallidos](https://docs.stripe.com/declines.md) - [Resumen de disputas](https://docs.stripe.com/disputes.md)