---
type: explanation
title: Verifikasi tanpa backend
summary: Apa itu verifikasi terhosting, untuk siapa ia, dan bagaimana Caputchin memverifikasi sebuah kiriman dan meneruskannya ke webhook atau email agar kamu tak pernah menjalankan backend.
---

Sebuah token Caputchin tak membuktikan apa pun sampai sesuatu memastikannya. Biasanya sesuatu itu adalah [backend-mu sendiri](/docs/integration-guides/verify-on-your-backend), yang memanggil `/siteverify` dan memutuskan apakah memercayai permintaan. Verifikasi terhosting memindahkan langkah itu ke Caputchin: formulirmu memposting ke sebuah penerus Caputchin, Caputchin memverifikasi token, membuang apa pun yang gagal, dan meneruskan hanya kiriman terverifikasi ke tujuan yang kamu pilih.

Ia adalah keputusan kepercayaan yang sama dengan pemeriksaan backend, dijalankan di sisi Caputchin alih-alih sisimu. Intinya tak ada panggilan `/siteverify` untuk ditulis dan tak ada secret untuk dijaga di server, karena tak ada server.

Verifikasi terhosting adalah fitur berbayar, tersedia di Alpha ke atas.

## Untuk siapa ia

Verifikasi terhosting ada untuk kasus di mana menjalankan backend hanya untuk memeriksa token lebih dari yang dibutuhkan proyek.

| Kamu adalah | Mengapa ia cocok |
|---|---|
| Sebuah situs statis (Webflow, Framer, HTML murni di CDN) | Tak ada server untuk menerima formulir atau memanggil `/siteverify`. |
| Sebuah pembangun no-code (Wix, Squarespace, Carrd) | Kamu tak bisa menambahkan kode verifikasi sisi-server. |
| Pengembang solo atau tim kecil | Sebuah formulir kontak atau pendaftaran tak sepadan dengan mendirikan dan mengoperasikan backend. |
| Sudah menjalankan backend, tapi tidak untuk formulir ini | Kamu bisa mengarahkan satu formulir ke penerus dan membiarkan sisa stack-mu sendiri. |

Jika kamu memang menjalankan backend dan ingin memverifikasi di sana, pakai [verifikasi di backend-mu](/docs/integration-guides/verify-on-your-backend) sebagai gantinya. Keduanya alternatif, bukan lapisan.

## Bagaimana ia bekerja

```mermaid
sequenceDiagram
  autonumber
  participant U as Pengunjung
  participant B as Peramban (widget)
  participant F as Penerus Caputchin
  participant D as Tujuanmu (webhook atau email)

  U->>B: Isi formulir dan kirim
  B->>F: POST field formulir plus token caputchin
  Note over F: Verifikasi token, lalu buang dari payload
  alt Token sah
    F->>D: Kirim kiriman
    D-->>F: Mengakui
    F-->>B: 200 dengan hasil pengiriman
  else Token hilang atau tak sah
    F-->>B: Ditolak, tak ada yang dikirim
  end
```

Penerus menahan kiriman di memori hanya untuk sesaat yang dibutuhkan untuk mengirimnya. Tak ada penyimpanan antara posting dan pengiriman, dan field `caputchin-token` disingkirkan sebelum payload mencapai tujuanmu.

## Tujuan

Kamu mengonfigurasi satu atau keduanya per kunci situs. Mengaktifkan keduanya adalah pola umum: kirim ke webhook untuk pemrosesan dan email salinan ke dirimu sendiri.

| Tujuan | Apa yang kamu terima |
|---|---|
| **Webhook** | Sebuah `POST` JSON yang membawa field formulirmu plus metadata verifikasi Caputchin. |
| **Email** | Sebuah email polos dengan field formulir dan footer yang mencatat Caputchin memverifikasi kiriman. |

Pengiriman tak ditandatangani. Kerahasiaan URL penerus itulah yang mengautentikasi panggilan webhook, jadi jaga URL keluar dari repositori publik dan kode sisi-klien. [Tutorial penyiapan](/docs/hosted-verification/set-up) menunjukkan payload webhook persisnya.

## Apa yang dijaga tetap privat

Verifikasi terhosting mengikuti sikap tanpa-data-pengunjung yang sama dengan sisa Caputchin:

- **Kiriman tak pernah disimpan.** Mereka hidup di memori proses selama durasi penerusan, lalu mereka lenyap. Bangun catatanmu sendiri di sisi webhook jika kamu mau satu.
- **Tak ada data tentang pengirim yang dikumpulkan.** Tanpa IP, tanpa User-Agent, tanpa sidik jari, tanpa pelacakan.
- **Telemetri hanya agregat.** Caputchin menghitung keberhasilan dan kegagalan pengiriman agar kamu bisa melihat apakah tujuanmu sehat, tak pernah isi kiriman mana pun. Lihat [statistik](/docs/hosted-verification/statistics).

## Bagaimana URL yang dipasok-pelanggan dijaga aman

Sebuah URL yang akan dipanggil server Caputchin adalah risiko Server-Side Request Forgery klasik. Penerus menolak URL webhook mana pun yang host-nya adalah alamat privat, loopback, link-local, atau cloud-metadata, baik saat kamu menyimpannya maupun lagi tepat sebelum tiap pengiriman. Kategori yang diblokir termasuk:

| Kategori | Contoh |
|---|---|
| Loopback dan tak ditentukan | `127.0.0.1`, `0.0.0.0`, `::1` |
| Privat (RFC 1918) | `10.x.x.x`, `172.16.x.x` hingga `172.31.x.x`, `192.168.x.x` |
| Link-local dan cloud metadata | `169.254.x.x`, khususnya endpoint metadata `169.254.169.254` |
| Carrier-grade NAT | `100.64.x.x` hingga `100.127.x.x` |
| Multicast dan tercadang | `224.x.x.x` dan ke atas |
| Hostname internal | `localhost` dan host mana pun yang berakhir dengan `.local`, `.localhost`, atau `.internal` |
| IPv6 privat | alamat link-local (`fe80::/10`) dan unique-local (`fc00::/7`) |

Pengkodean yang mencoba menyamarkan alamat yang diblokir juga tertangkap: host integer-desimal seperti `http://2130706433/` atau host heksa seperti `http://0x7f000001/` (keduanya berarti `127.0.0.1`) ditolak. Hanya URL `http` dan `https` yang diterima; skema lain mana pun ditolak. Penerus juga menolak mengikuti pengalihan, jadi sebuah endpoint webhook tak bisa memantulkan panggilan ke target internal. URL yang diblokir muncul sebagai galat umum ketimbang yang spesifik, jadi ia tak bisa dipakai untuk menyelidik jaringan. Webhook-mu karenanya harus hidup di URL `https` publik.

## Apa yang sengaja ditinggalkan

- **Tanpa kotak masuk kiriman.** Tak ada riwayat tersimpan kiriman untuk dijelajahi di dasbor.
- **Tanpa adaptor Discord, Slack, Telegram, atau SMS milik sendiri.** Hanya webhook dan email. Sebuah webhook bisa menyebar ke mana pun itu di sisimu.
- **Tanpa unggahan berkas.** Penerus menerima field teks; sebuah kiriman yang membawa berkas ditolak.
- **Tanpa transformasi payload.** Apa yang diposting formulir adalah apa yang diterima tujuanmu, plus metadata verifikasi.

## Lihat juga

- [Siapkan verifikasi terhosting](/docs/hosted-verification/set-up): panduan yang menyambungkannya ke kotak masuk uji dulu.
- [Statistik verifikasi terhosting](/docs/hosted-verification/statistics): membaca kesehatan pengiriman.
- [Verifikasi di backend-mu](/docs/integration-guides/verify-on-your-backend): alternatif saat kamu memang menjalankan server.
