# Guia de segurança de integração Garanta a conformidade com PCI e comunicações seguras entre clientes e servidores. O [Padrão de Segurança de Dados do Setor de Cartões de Pagamento](https://www.pcisecuritystandards.org/pci_security/) (PCI DSS) é o padrão global de segurança para todas as entidades que armazenam, processam ou transmitem dados do titular do cartão ou dados de autenticação confidenciais. O PCI DSS define um nível básico de proteção para os consumidores e ajuda a reduzir fraudes e violações de dados em todo o ecossistema de pagamentos. Qualquer pessoa envolvida no processamento, na transmissão ou no armazenamento de dados de cartão deve estar em conformidade com o PCI DSS. ## Valide sua conformidade com o PCI A conformidade com PCI é uma responsabilidade compartilhada e se aplica à Stripe e à sua empresa: - A Stripe é certificada anualmente por um Avaliador de Segurança Qualificado (QSA) pelo PCI como um [Provedor de Serviços de Nível 1](https://www.visa.com/splisting/searchGrsp.do?companyNameCriteria=stripe,%20inc) do PCI que cumpre todos os requisitos PCI. - Como uma empresa recebe pagamentos, você deve fazer isso em conformidade com o PCI e atestar anualmente essa conformidade. Revise os requisitos de documentação da sua empresa no [Dashboard](https://dashboard.stripe.com/settings/compliance/documents) e continue lendo este guia para saber como a Stripe pode ajudar você a ficar em conformidade com PCI. ## Usar integrações de baixo risco Alguns modelos de negócios exigem a coleta de PANs não tokenizados em uma página de pagamento. Se o seu negócio lida com dados confidenciais de cartão de crédito diretamente ao aceitar pagamentos, você pode ser obrigado a cumprir mais de 300 controles de segurança previstos no PCI DSS. Isso pode exigir a aquisição, implementação e manutenção de softwares e hardwares de segurança dedicados, além da contratação de auditores externos para dar suporte aos requisitos de avaliação anual. Muitos modelos de negócios não precisam lidar com dados sigilosos de cartões. Em vez disso, você pode usar uma de nossas [integrações de pagamento](https://docs.stripe.com/payments.md) de baixo risco para coletar e transmitir com segurança dados de pagamento diretamente para a Stripe, sem que eles passem por seus servidores, reduzindo suas obrigações com PCI. ### Dados de cartão fora do escopo que você pode armazenar com segurança A Stripe retorna dados de cartão não sigilosos em resposta a uma solicitação de cobrança. Isso inclui o tipo, os quatro últimos dígitos e a data de validade do cartão. Como essas informações não estão sujeitas à conformidade com PCI, você pode armazená-las em seu banco de dados. Você também pode armazenar qualquer coisa retornada por nossa [API](https://docs.stripe.com/api.md). ## Use TLS e HTTPS TLS refere-se ao processo de transmitir dados com segurança entre o cliente (o aplicativo ou navegador que seu cliente está usando) e seu servidor. O protocolo Secure Sockets Layer (SSL) realizava isso originalmente, mas está desatualizado e não é mais seguro. O TLS substituiu o SSL, mas o termo *SSL* continua a ser usado coloquialmente em referência ao TLS e sua função para proteger os dados transmitidos. As páginas de pagamento devem usar uma versão recente (TLS 1.2 ou superior), pois essa reduz significativamente o risco de ataques de man-in-the-middle para você e seus clientes. O TLS tenta realizar o seguinte: - Criptografar e verificar a integridade do tráfego entre o cliente e o servidor. - Verifique se o cliente está se comunicando com o servidor correto. Na prática, geralmente é preciso verificar que o proprietário do domínio e o proprietário do servidor são a mesma entidade. Isso ajuda a evitar ataques “man-in-the-middle”. Sem isso, não há garantia de que você esteja criptografando o tráfego para o destinatário correto. Verificar se todos os recursos (por exemplo, JavaScript, CSS e imagens) também são fornecidos por TLS para evitar que os clientes vejam um [alerta de conteúdo misto](https://web.dev/what-is-mixed-content/) no navegador. O uso de TLS exige um *certificado digital*, um arquivo emitido por uma autoridade de certificação (CA). A instalação desse certificado garante ao cliente que está se comunicando com o servidor com o qual espera falar, e não com um impostor. Obtenha um certificado digital de um provedor de certificados confiável, como: - [Vamos criptografar](https://letsencrypt.org/) - [DigiCert](https://www.digicert.com/tls-ssl/basic-tls-ssl-certificates) - [NameCheap](https://www.namecheap.com/security/ssl-certificates.aspx) Você pode [testar sua integração](https://docs.stripe.com/testing.md) sem usar HTTPS, se necessário, e habilitá-lo quando estiver pronto para aceitar cobranças em ambiente de produção. No entanto, todas as interações entre o seu servidor e a Stripe precisam usar HTTPS (ou seja, quando usar nossas bibliotecas). ### Configurar TLS Para configurar o TLS: 1. Compre um certificado de um provedor adequado. 1. Configure seu servidor para usar o certificado. Esta etapa é complexa, portanto, siga o guia de instalação do provedor que você usa. Como o TLS é um conjunto complexo de ferramentas de criptografia, é fácil perder alguns detalhes. Recomendamos usar o [Teste de servidor SSL](https://www.ssllabs.com/ssltest/) da Qualys SSL Labs para garantir que você configure tudo com segurança. ## Considerações de segurança A inclusão de JavaScript de outros sites torna sua segurança dependente deles e representa um risco de segurança. Se eles forem comprometidos, um invasor poderá executar códigos arbitrários em sua página. Na prática, vários sites usam JavaScript para serviços como Google Analytics, mesmo em páginas seguras. Mesmo assim, recomendamos tentar minimizar esse problema. Se você estiver usando *webhooks*, use TLS no endpoint para evitar que o tráfego seja interceptado e que as notificações sejam alteradas (informações confidenciais nunca são incluídas em um evento de webhook). Você também deve [verificar as assinaturas dos webhooks](https://docs.stripe.com/webhooks.md#verify-official-libraries) e [incluir os endereços IP da Stripe](https://docs.stripe.com/ips.md) na lista de permissões para garantir que cada webhook da Stripe que você receber seja enviado exclusivamente pela Stripe. Embora a conformidade com os Padrões de Segurança de Dados seja importante, suas preocupações com a segurança não devem parar por aí. Alguns bons recursos para aprender sobre segurança na web são: - [OWASP](https://owasp.org/) - [SANS](https://www.sans.org/reading-room/) - [NIST](http://csrc.nist.gov/) ### Política de Segurança de Conteúdo Se você implementou uma *Política de segurança de conteúdo* (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), o conjunto completo de diretivas exigidas pelo Checkout, pelos componentes integrados do Connect e pelo Stripe.js é: #### 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 incorporados do 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 do elemento de estilo vazio) Se estiver usando um arquivo CSS para carregar [fontes da web](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#fonts-object) para usar com componentes integrados do Connect, o URL precisa ser autorizado pela sua diretiva CSP [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` > A adição de `*.js.stripe.com` permite que o Stripe.js melhore o desempenho iniciando quadros em diferentes origens, sempre que possível. Se estiver usando um arquivo CSS para carregar [fontes da web](https://docs.stripe.com/js.md#stripe_elements) para usar com Elements, o URL precisa ser autorizado pela sua diretiva CSP [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src). Se estiver usando uma forma de pagamento com funções de redirecionamento (por exemplo, cartões que podem precisar de 3D Secure ou iDeal), inclua `https://hooks.stripe.com` como diretiva `frame-src`. Se estiver usando o [Address Element](https://docs.stripe.com/elements/address-element.md) com sua própria chave de API do Google Maps, inclua `https://maps.googleapis.com` como uma diretiva connect-src e script-src. Consulte o [guia oficial da API do Google Maps](https://developers.google.com/maps/documentation/javascript/content-security-policy) para obter os requisitos de CSP mais recentes. Se estiver usando [Trusted Types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for), você precisa permitir o carregamento de scripts dinâmicos de `https://js.stripe.com` e `https://*.js.stripe.com`. Você pode usar o exemplo abaixo de [política padrão](https://w3c.github.io/webappsec-trusted-types/dist/spec/#default-policy-hdr) para habilitá-lo: ```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; }, }); ``` ### Suporte a isolamento de origem cruzada No momento, não aceitamos *sites isolados de origem cruzada* (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). O isolamento de origem cruzada exige suporte de todas as dependências, e várias dependências importantes que habilitam nossos produtos de pagamento ainda não oferecem suporte a esse recurso. ## See also - [Conformidade com o PCI DSS](https://stripe.com/guides/pci-compliance) - [Práticas recomendadas para gerenciar chaves de API secretas](https://docs.stripe.com/keys-best-practices.md) - [Webhooks](https://docs.stripe.com/webhooks.md) - [Recusas e falhas em pagamentos](https://docs.stripe.com/declines.md) - [Visão geral das contestações](https://docs.stripe.com/disputes.md)