# Panduan keamanan integrasi

Pastikan kepatuhan PCI dan komunikasi server pelanggan yang aman.

[Standar Keamanan Data Industri Kartu Pembayaran](https://www.pcisecuritystandards.org/pci_security/) (PCI DSS) adalah standar keamanan global untuk semua entitas yang menyimpan, memproses, atau mengirimkan data autentikasi pemegang kartu atau sensitif. PCI DSS menetapkan tingkat perlindungan dasar bagi konsumen dan membantu mengurangi penipuan dan pelanggaran data di seluruh ekosistem pembayaran. Siapa pun yang terlibat dengan pemrosesan, transmisi, atau penyimpanan data kartu harus mematuhi PCI DSS.

## Validasikan kepatuhan PCI Anda

Kepatuhan PCI adalah tanggung jawab bersama yang berlaku untuk Stripe dan bisnis Anda:

- Stripe disertifikasi setiap tahun oleh Penilai Keamanan yang Kompeten (QSA) PCI independen sebagai Penyedia Layanan [PCI Level 1](https://www.visa.com/splisting/searchGrsp.do?companyNameCriteria=stripe,%20inc) yang memenuhi semua persyaratan PCI.
- Sebagai bisnis yang menerima pembayaran, Anda harus melakukannya dengan cara yang mematuhi PCI, dan setiap tahunnya membuktikan kepatuhan ini.

Tinjau persyaratan dokumentasi untuk bisnis Anda di [Dashboard](https://dashboard.stripe.com/settings/compliance/documents) dan lanjutkan membaca panduan ini untuk mempelajari cara Stripe dapat membantu Anda menjadi patuh PCI.

## Gunakan integrasi berisiko rendah

Beberapa model bisnis memerlukan asupan PAN yang tidak ditokenisasi di halaman pembayaran. Jika bisnis Anda menangani data kartu kredit sensitif secara langsung saat menerima pembayaran, Anda mungkin diminta untuk memenuhi lebih dari 300 kontrol keamanan di PCI DSS. Ini mungkin mengharuskan Anda untuk membeli, menerapkan, dan memelihara perangkat lunak dan perangkat keras keamanan khusus, serta menyewa auditor eksternal untuk mendukung persyaratan penilaian tahunan Anda.

Banyak model bisnis tidak perlu menangani data kartu sensitif. Sebagai gantinya, Anda dapat menggunakan salah satu [integrasi pembayaran](https://docs.stripe.com/payments.md) berisiko rendah kami agar aman mengumpulkan dan mentransmisikan informasi pembayaran secara langsung ke Stripe tanpa meneruskannya melalui server Anda, sehingga mengurangi kewajiban PCI.

### Data kartu di luar lingkup yang dapat Anda simpan dengan aman

Stripe mengembalikan informasi kartu yang tidak sensitif sebagai respons permintaan charge. Ini termasuk tipe kartu, empat angka terakhir kartu, dan tanggal kedaluwarsa. Informasi ini tidak termasuk dalam kepatuhan PCI, sehingga Anda dapat menyimpan properti ini di database. Selain itu, Anda dapat menyimpan apa pun yang dikembalikan oleh [API](https://docs.stripe.com/api.md) kami.

## Gunakan TLS dan HTTPS

TLS mengacu pada proses pengiriman data secara aman antara client—aplikasi atau browser yang digunakan pelanggan Anda—dan server Anda. Protokol Secure Sockets Layer (SSL) pada awalnya melakukan hal ini, tetapi sudah usang dan tidak lagi aman. TLS menggantikan SSL, tetapi istilah *SSL* terus digunakan dalam bahasa sehari-hari saat merujuk TLS dan fungsinya untuk melindungi data yang ditransmisikan.

Halaman pembayaran harus menggunakan versi terbaru (TLS 1.2 atau yang lebih tinggi) karena secara signifikan mengurangi risiko serangan man-in-the-middle bagi Anda maupun pelanggan Anda. TLS berusaha untuk mencapai hal-hal berikut ini:

- Enkripsikan dan verifikasikan integritas lalu lintas antara client dan server Anda.
- Memverifikasi apakah client berkomunikasi dengan server yang benar. Dalam praktiknya, hal ini biasanya berarti memverifikasi apakah pemilik domain dan pemilik server adalah entitas yang sama. Hal ini membantu mencegah serangan man-in-the-middle. Tanpanya, tidak ada jaminan bahwa Anda mengenkripsi lalu lintas ke penerima yang benar.

Pastikan semua sumber daya (misalnya, JavaScript, CSS, dan gambar) juga disediakan melalui TLS untuk menghindari pelanggan Anda melihat [peringatan konten campuran](https://web.dev/what-is-mixed-content/) di browser mereka.

Penggunaan TLS memerlukan *sertifikat digital*—file yang diterbitkan oleh otoritas sertifikasi (CA). Penginstalan sertifikat ini menjamin client benar-benar berkomunikasi dengan server yang dimaksud, dan bukan dengan penipu. Dapatkan sertifikat digital dari penyedia sertifikat terkemuka, seperti:

- [Mari Lakukan Enkripsi](https://letsencrypt.org/)
- [DigiCert](https://www.digicert.com/tls-ssl/basic-tls-ssl-certificates)
- [NameCheap](https://www.namecheap.com/security/ssl-certificates.aspx)

Anda dapat [menguji integrasi](https://docs.stripe.com/testing.md) tanpa menggunakan HTTPS jika perlu, dan aktifkan saat Anda siap menerima tagihan aktif. Namun, semua interaksi antara server Anda dan Stripe harus menggunakan HTTPS (yaitu, saat menggunakan library kami).

### Siapkan TLS

Untuk menyiapkan TLS:

1. Beli sertifikat dari penyedia yang sesuai.
1. Konfigurasikan server Anda untuk menggunakan sertifikat. Langkah ini kompleks, jadi ikuti panduan instalasi dari penyedia yang Anda gunakan.

Karena TLS adalah rangkaian alat kriptografi yang kompleks, beberapa detailnya mungkin saja terlewatkan. Kami merekomendasikan penggunaan [SSL Server Test](https://www.ssllabs.com/ssltest/) dari Qualys SSL Labs untuk memastikan Anda menyiapkan semuanya dengan cara yang aman.

## Pertimbangan keamanan

Menyertakan JavaScript dari situs lain membuat keamanan Anda menjadi bergantung pada situs mereka dan menimbulkan risiko keamanan. Jika situs mereka sampai dibobol, penyerang dapat mengeksekusi kode arbitrer di halaman Anda. Dalam praktiknya, banyak situs menggunakan JavaScript untuk layanan seperti Google Analytics, bahkan di halaman aman. Meskipun demikian, kami merekomendasikan untuk meminimalkannya.

Jika Anda menggunakan *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests), gunakan TLS untuk endpoint untuk menghindari traffic dicegat dan notifikasi diubah (informasi sensitif tidak pernah disertakan dalam peristiwa webhook). Anda juga harus [verifikasi tanda tangan webhook](https://docs.stripe.com/webhooks.md#verify-official-libraries) dan [daftar yang diizinkan Alamat IP Stripe](https://docs.stripe.com/ips.md) untuk memastikan bahwa setiap webhook Stripe yang Anda terima dikirim secara eksklusif oleh Stripe.

Meskipun mematuhi Data Security Standards itu penting, Anda tidak boleh berhenti memikirkan keamanan. Beberapa sumber daya yang bagus untuk mempelajari keamanan web adalah:

- [OWASP](https://owasp.org/)
- [SANS](https://www.sans.org/reading-room/)
- [NIST](http://csrc.nist.gov/)

### Kebijakan Keamanan Konten

Jika Anda telah menerapkan *Kebijakan Keamanan Konten* (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), rangkaian lengkap arahan yang diperlukan oleh Checkout, komponen Connect tersemat, dan Stripe.js adalah:

#### Checkout

- `connect-src`, `https://checkout.stripe.com`
- `frame-src`, `https://checkout.stripe.com`
- `script-src`, `https://checkout.stripe.com`
- `img-src`, `https://*.stripe.com`

#### Hubungkan komponen tersemat

- `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 dari elemen gaya kosong)

Jika Anda menggunakan file CSS untuk memuat [font web](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#fonts-object) untuk digunakan dengan komponen tersemat Connect, URL-nya harus diizinkan oleh arahan CSP [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src) Anda.

#### 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`

> Menambahkan `*.js.stripe.com` memungkinkan Stripe. js meningkatkan kinerja dengan memulai frame pada asal yang berbeda, apabila memungkinkan.

Jika Anda menggunakan file CSS untuk memuat [font web](https://docs.stripe.com/js.md#stripe_elements) untuk digunakan dengan Elements, URL-nya harus diizinkan oleh arahan CSP [connect-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src) Anda.

Jika Anda menggunakan metode pembayaran dengan fungsi pengalihan (misalnya, kartu yang mungkin memerlukan 3D Secure atau iDeal), sertakan `https://hooks.stripe.com` sebagai arahan `frame-src`.

Jika Anda menggunakan [Address Element](https://docs.stripe.com/elements/address-element.md) dengan kunci Google Maps API Anda sendiri, sertakan `https://maps.googleapis.com` as a connect-src dan arahan script-src. Lihat [panduan resmi Google Maps API](https://developers.google.com/maps/documentation/javascript/content-security-policy) untuk persyaratan CSP terbaru.

Jika menggunakan [Trusted Types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for), Anda harus mengizinkan pemuatan skrip dinamis `https://js.stripe.com` dan `https://*.js.stripe.com`. Anda dapat menggunakan contoh [kebijakan default](https://w3c.github.io/webappsec-trusted-types/dist/spec/#default-policy-hdr) untuk mengaktifkannya:

```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;
  },
});
```

### Dukungan isolasi lintas asal

Saat ini, kami tidak mendukung *Situs terisolasi lintas asal* (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).

Isolasi lintas asal memerlukan dukungan dari semua dependensi, dan beberapa dependensi kunci yang memungkinkan penawaran pembayaran kami belum memberikan dukungan untuk fitur ini.

## See also

- [Kepatuhan PCI DSS](https://stripe.com/guides/pci-compliance)
- [Praktik terbaik untuk mengelola kunci API rahasia](https://docs.stripe.com/keys-best-practices.md)
- [Webhook](https://docs.stripe.com/webhooks.md)
- [Penolakan dan pembayaran yang gagal](https://docs.stripe.com/declines.md)
- [Gambaran umum sengketa](https://docs.stripe.com/disputes.md)
