# Leitfaden zur Integration Sorgen Sie für PCI-Konformität und eine sichere Kommunikation zwischen Kund/innen und Ihrem Server. Der [Payment Card Industry Data Security Standard](https://www.pcisecuritystandards.org/pci_security/) (PCI DSS) ist der globale Sicherheitsstandard für alle Unternehmen, die Karteninhaber- oder sensible Authentifizierungsdaten speichern, verarbeiten oder übertragen. Der PCI DSS legt ein Mindestmaß an Schutz für Verbraucher fest und trägt dazu bei, Betrug und Datenverstöße im gesamten Zahlungsökosystem zu reduzieren. Alle, die mit der Verarbeitung, Übertragung oder Speicherung von Kartendaten befasst sind, müssen den PCI DSS einhalten. ## Validierung Ihrer PCI-Konformität Die PCI-Konformität stellt eine gemeinsame Verantwortung dar und gilt sowohl für Stripe als auch für Ihr Unternehmen. - Stripe wird jährlich von einem unabhängigen PCI Qualified Security Assessor (QSA) als [PCI Level 1](https://www.visa.com/splisting/searchGrsp.do?companyNameCriteria=stripe,%20inc)-Dienstleister zertifiziert, der alle PCI-Anforderungen erfüllt. - Als Unternehmen, das Zahlungen annimmt, müssen Sie dies auf eine PCI-konforme Art und Weise tun und diese Konformität jährlich bescheinigen. Überprüfen Sie die Dokumentationsanforderungen für Ihr Unternehmen in Ihrem [Dashboard](https://dashboard.stripe.com/settings/compliance/documents) und informieren Sie sich in diesem Leitfaden auch darüber, wie Stripe Sie dabei unterstützen kann, PCI-Konformität zu erlangen. ## Integrationen mit geringem Risiko verwenden Einige Geschäftsmodelle erfordern die Eingabe von nicht tokenisierten PANs auf einer Zahlungsseite. Wenn Ihr Unternehmen bei der Annahme von Zahlungen direkt mit sensiblen Kreditkartendaten umgeht, müssen Sie möglicherweise mehr als 300 Sicherheitskontrollen gemäß PCI DSS erfüllen. Dies kann den Kauf, die Implementierung und die Wartung spezieller Sicherheitssoftware und -hardware sowie die Beauftragung externer Prüfer/innen zur Unterstützung Ihrer jährlichen Bewertungsanforderungen erforderlich machen. Viele Geschäftsmodelle müssen keine sensiblen Kartendaten verarbeiten. Sie können stattdessen eine unserer risikoarmen [Zahlungsintegrationen](https://docs.stripe.com/payments.md) verwenden, um Zahlungsinformationen sicher zu erfassen und direkt an Stripe zu übermitteln, ohne dass sie Ihre Server durchlaufen, wodurch sich Ihre PCI-Verpflichtungen verringern. ### Außerhalb des Geltungsbereichs liegende Kartendaten, die Sie sicher speichern können Stripe gibt nicht vertrauliche Kartendaten in der Antwort auf eine Zahlungsanfrage zurück. Dazu gehören der Kartentyp, die letzten vier Ziffern der Karte und das Ablaufdatum. Diese Informationen unterliegen nicht der PCI-Konformität, sodass Sie jede dieser Eigenschaften in Ihrer Datenbank speichern können. Zusätzlich können Sie alle Daten speichern, die von unserer [API](https://docs.stripe.com/api.md) zurückgegeben werden. ## Verwendung von TLS und HTTPS TLS bezieht sich auf das Verfahren der sicheren Datenübertragung zwischen dem Client – also der auf Kundenseite genutzten App bzw. dem Browser – und Ihrem Server. Ursprünglich wurde hierfür das Secure Sockets Layer-Protokoll (SSL-Protokoll) eingesetzte, dieses ist aber inzwischen veraltet und nicht mehr sicher. SSL wurde daher durch TLS ersetzt. Der Begriff *SSL* wird jedoch weiterhin umgangssprachlich verwendet, wenn es um TLS und dessen Funktion zum Schutz der übertragenen Daten geht. Zahlungsseiten müssen eine aktuelle Version (TLS 1.2 oder höher) verwenden, da sich das Risiko von Man-in-the-Middle-Angriffen für Sie und Ihre Kundinnen und Kunden dadurch erheblich verringert. TLS möchte Folgendes erreichen: - Verschlüsselung und Verifizierung der Integrität des Datenverkehrs zwischen dem Client und dem Server. - Überprüfen Sie, ob der Client mit dem richtigen Server kommuniziert. Dies bedeutet in der Praxis üblicherweise, dass überprüft wird, ob der Eigentümer der Domäne und der Eigentümer des Servers die gleiche Einheit sind. Dadurch werden Man-in-the-Middle-Angriffe verhindert. Ohne die richtige Kommunikation gibt es keine Garantie, dass Sie den Datenverkehr für den richtigen Empfänger verschlüsseln. Stellen Sie sicher, dass alle Ressourcen (z. B.JavaScript, CSS und Bilder) ebenfalls über TLS bereitgestellt werden, um zu vermeiden, dass Ihren Kundinnen und Kunden eine [Mixed-Content-Warnung](https://web.dev/what-is-mixed-content/) in ihrem Browser angezeigt wird. Um TLS verwenden zu können, wird ein *digital certificate* benötigt – eine Datei, die von einer Zertifizierungsstelle ausgestellt wird. Wenn dieses Zertifikat installiert ist, ist dadurch für den Client gewährleistet, dass dieser tatsächlich mit dem Server kommuniziert, mit dem er kommunizieren soll, und nicht mit einem Betrüger. Beziehen Sie ein solches Zertifikat von einem seriösen Zertifikatsanbieter, wie z. B.: - [Verschlüsselung durchführen](https://letsencrypt.org/) - [DigiCert](https://www.digicert.com/tls-ssl/basic-tls-ssl-certificates) - [NameCheap](https://www.namecheap.com/security/ssl-certificates.aspx) Sie können Ihre [Integration bei Bedarf ohne HTTPS testen](https://docs.stripe.com/testing.md) und es aktivieren, sobald Sie bereit sind, Live-Zahlungen zu akzeptieren. Allerdings müssen alle Interaktionen zwischen Ihrem Server und Stripe über HTTPS erfolgen (d. h. bei Verwendung unserer Bibliotheken). ### Einrichten von TLS So richten Sie TLS ein: 1. Erwerben Sie ein Zertifikat von einem geeigneten Anbieter. 1. Konfigurieren Sie Ihren Server für die Verwendung des Zertifikats. Da dieser Schritt komplex ist, befolgen Sie daher die Installationsanleitung des von Ihnen verwendeten Anbieters. Da es sich bei TLS um eine komplexe Suite kryptografischer Tools handelt, kann es leicht passieren, dass Dinge übersehen werden. Wir empfehlen Ihnen, den [SSL Server Test](https://www.ssllabs.com/ssltest/) von Qualys SSL Labs durchzuführen, um sicherzustellen, dass Sie nichts vergessen und alles sicher eingerichtet haben. ## Sicherheitsüberlegungen Durch das Einbinden von JavaScript von anderen Websites machen Sie Ihre eigene Sicherheit von diesen Websites abhängig. Das stellt ein Sicherheitsrisiko dar. Falls diese Websites kompromittiert werden, sind Angreifer möglicherweise in der Lage, beliebigen Code auf Ihrer Website auszuführen. Tatsächlich nutzen viele Websites JavaScript für Dienste wie Google Analytics – auch auf sicheren Seiten. Wir empfehlen Ihnen dennoch, eine solche Nutzung weitestgehend zu vermeiden. Wenn Sie *Webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) verwenden, empfehlen wir die Verwendung von TLS für den Endpoint, um zu verhindern, dass Datenverkehr abgefangen und Benachrichtigungen verändert werden (sensible Informationen sind niemals in einem Webhook-Ereignis enthalten). [Überprüfen Sie auch die Webhook-Signaturen](https://docs.stripe.com/webhooks.md#verify-official-libraries) und fügen Sie die [IP-Adressen von Stripe zur Whitelist](https://docs.stripe.com/ips.md) hinzu, um sicherzustellen, dass jeder von Ihnen empfangene Stripe-Webhook ausschließlich von Stripe gesendet wird. Obwohl die Einhaltung der Datensicherheitsstandards wichtig ist, sollten Sie an dieser Stelle nicht damit aufhören, sich über die Sicherheit Gedanken zu machen. Nachfolgend sind einige gute Ressourcen aufgelistet, um mehr über Websicherheit zu erfahren: - [OWASP](https://owasp.org/) - [SANS](https://www.sans.org/reading-room/) - [NIST](http://csrc.nist.gov/) ### Inhaltssicherheitsrichtlinie Wenn Sie eine *Sicherheitsrichtlinie für Inhalte* (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) bereitgestellt haben, sind für Checkout, in Connect eingebettete Komponenten und Stripe.js die folgenden Richtlinien erforderlich: #### Checkout - `connect-src`, `https://checkout.stripe.com` - `frame-src`, `https://checkout.stripe.com` - `script-src`, `https://checkout.stripe.com` - `img-src`, `https://*.stripe.com` #### In Connect eingebettete Komponenten - `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 eines leeren Style-Elements) Wenn Sie eine CSS-Datei zum Laden von [Web-Fonts](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#fonts-object) zur Nutzung mit in Connect eingebetteten Komponenten verwenden, muss die entsprechende URL durch Ihre CSP-Direktive [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src) zugelassen sein. #### 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` > Durch das Hinzufügen von `*.js.stripe.com` kann Stripe.js die Leistung verbessern, indem nach Möglichkeit Frames mit unterschiedlichen Ursprüngen gestartet werden. Wenn Sie eine CSS-Datei zum Laden von [Web-Fonts](https://docs.stripe.com/js.md#stripe_elements) zur Nutzung mit Elements verwenden, muss die entsprechende URL durch Ihre CSP-Direktive [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src) zugelassen sein. Falls Sie eine Zahlungsmethode mit Weiterleitungsfunktionen verwenden (z. B. Karten, die möglicherweise 3D Secure erfordern oder iDeal), fügen Sie `https://hooks.stripe.com` als `frame-src`-Direktive ein. Wenn Sie das [Address Element](https://docs.stripe.com/elements/address-element.md) mit Ihrem eigenen Google Maps API-Schlüssel aktivieren möchten, fügen Sie `https://maps.googleapis.com` als connect-src- und script-src-Direktive ein. Die aktuellen CSP-Anforderungen finden Sie im [offiziellen Leitfaden zur Google Maps API](https://developers.google.com/maps/documentation/javascript/content-security-policy). Wenn Sie [Trusted Types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for) verwenden, müssen Sie das Laden von dynamischen Skripts von `https://js.stripe.com` und `https://*.js.stripe.com`gestatten. Sie können das folgende Beispiel einer [Standardrichtlinie](https://w3c.github.io/webappsec-trusted-types/dist/spec/#default-policy-hdr) verwenden, um dies zu ermöglichen: ```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; }, }); ``` ### Unterstützung für Cross-Origin Isolation Derzeit werden *Ursprungsübergreifende isolierte Standorte* (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) nicht unterstützt. Cross-origin Isolation erfordert die Unterstützung durch alle Abhängigkeiten, und einige wichtige Abhängigkeiten, die unsere Zahlungsangebote ermöglichen, bieten noch keine Unterstützung für diese Funktion. ## See also - [PCI-DSS-Konformität](https://stripe.com/guides/pci-compliance) - [Best Practices für die Verwaltung von geheimen API-Schlüsseln](https://docs.stripe.com/keys-best-practices.md) - [Webhooks](https://docs.stripe.com/webhooks.md) - [Angefochtene und fehlgeschlagene Zahlungen](https://docs.stripe.com/declines.md) - [Übersicht über Zahlungsanfechtungen](https://docs.stripe.com/disputes.md)