Cara Implementasi Google reCAPTCHA di PHP (Backend) Biar Form Aman dari Bot

Pernah gak lu bikin form kontak, form login, atau form register, tapi isinya spam semua?
Baru upload website, eh inbox udah penuh sama bot

Nah, salah satu cara paling simpel dan ampuh buat ngusir bot adalah Google reCAPTCHA.
Di artikel ini gue bakal jelasin cara implementasi reCAPTCHA di backend PHP, step-by-step, tanpa ribet, dan gampang dipahami.

Santai aja, kita bahas pelan-pelan.

Apa Itu Google reCAPTCHA?

Singkatnya, reCAPTCHA itu sistem dari Google buat bedain manusia sama bot.
Biasanya bentuknya:

  • “I’m not a robot”
  • Pilih gambar lampu lalu lintas
  • Atau bahkan invisible (tanpa klik)

Di tutorial ini, kita pakai reCAPTCHA v2 (I’m not a robot) karena paling umum dan gampang diimplementasi.

Kenapa gak langsung pakai reCAPTCHA v3 aja? Karena v3 itu kerja di background tanpa interaksi user sama sekali, jadi butuh sedikit lebih banyak konfigurasi buat nentuin threshold score yang pas (v3 ngasih skor 0.0-1.0 buat tiap request, dan kita yang nentuin batas mana yang dianggap bot). Buat pemula atau yang baru pertama kali implementasi, v2 jauh lebih gampang dipahami karena hasilnya jelas: user checklist atau enggak.

1. Daftarin Website ke Google reCAPTCHA

Pertama, buka halaman resmi Google reCAPTCHA:
https://www.google.com/recaptcha/admin

Terus:

  1. Login pakai akun Google
  2. Klik Create
  3. Isi label (bebas)
  4. Pilih reCAPTCHA v2
  5. Pilih tipe “I’m not a robot” Checkbox
  6. Masukkan domain website lu
  7. Submit

Nanti lu bakal dapet:

  • Site Key
  • Secret Key

Nah, dua key ini penting banget. Jangan sampe bocor ya bro, terutama Secret Key.

2. Pasang reCAPTCHA di Form HTML

Contoh form sederhana:

<form action="proses.php" method="POST">
 <input type="text" name="nama" placeholder="Nama" required>
 <input type="email" name="email" placeholder="Email" required>

 <div class="g-recaptcha" data-sitekey="ISI_SITE_KEY_KAMU"></div>

 <button type="submit">Kirim</button>
</form>

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

Kalau form lu tampil dan ada checkbox “I’m not a robot”, berarti setup frontend udah beres.

3. Validasi reCAPTCHA di Backend PHP

Ini bagian paling penting, bro.
reCAPTCHA wajib divalidasi di backend, bukan cuma frontend.

Contoh file proses.php:

<?php

$secretKey = "ISI_SECRET_KEY_KAMU";

if (!isset($_POST['g-recaptcha-response'])) {
 die("reCAPTCHA tidak ditemukan");
}

$response = $_POST['g-recaptcha-response'];
$remoteIp = $_SERVER['REMOTE_ADDR'];

$verifyUrl = "https://www.google.com/recaptcha/api/siteverify";

$data = [
 'secret' => $secretKey,
 'response' => $response,
 'remoteip' => $remoteIp
];

$options = [
 'http' => [
 'header' => "Content-type: application/x-www-form-urlencoded\r\n",
 'method' => 'POST',
 'content' => http_build_query($data),
 ]
];

$context = stream_context_create($options);
$result = file_get_contents($verifyUrl, false, $context);

$resultJson = json_decode($result, true);

if ($resultJson['success'] !== true) {
 die("Verifikasi reCAPTCHA gagal");
}

// Kalau lolos reCAPTCHA, lanjut proses form
echo "Form berhasil diproses";

Kalau success bernilai true, artinya user itu manusia.
Kalau false, fix bot atau request mencurigakan.

4. Tips Penting Biar reCAPTCHA Lebih Aman

Beberapa tips dari pengalaman:

  • Jangan pernah validasi reCAPTCHA cuma di frontend
  • Simpan Secret Key di .env atau config, jangan hardcode
  • Tambahin validasi lain (rate limit, CSRF token)
  • Jangan tampilkan pesan error terlalu detail ke user

reCAPTCHA itu lapisan keamanan tambahan, bukan satu-satunya benteng.

Sebagai gambaran, ini contoh sederhana nambahin CSRF token biar makin aman. Sebelum render form, generate token dan simpan di session:

session_start();
$csrfToken = bin2hex(random_bytes(32));
$_SESSION["csrf_token"] = $csrfToken;

Terus tambahin sebagai hidden input di form HTML, dan validasi di proses.php sebelum lanjut ke verifikasi reCAPTCHA:

if (!hash_equals($_SESSION["csrf_token"], $_POST["csrf_token"] ?? "")) {
    die("Token tidak valid");
}

Kombinasi reCAPTCHA plus CSRF token ini bikin form kamu jauh lebih tahan dari bot otomatis sekaligus serangan cross-site request forgery, dua ancaman yang sering muncul bareng-bareng di form publik.

5. Test Implementasi

Coba submit form:

  • Tanpa centang reCAPTCHA, harus gagal
  • Dengan centang, harus sukses

Kalau sesuai, berarti implementasi lu udah bener. Jangan lupa juga test di beberapa browser berbeda (Chrome, Firefox, Safari) karena kadang ada perbedaan kecil soal cara browser handle script eksternal dari Google, apalagi kalau user pakai extension pemblokir iklan atau tracker yang bisa ikut ngeblokir script reCAPTCHA.

Test Implementasi

Kendala yang Sering Muncul

  • Checkbox reCAPTCHA gak muncul sama sekali
    Cek console browser (F12), biasanya ada error terkait domain yang gak terdaftar. Pastikan domain yang kamu daftarin di halaman admin reCAPTCHA persis sama dengan domain yang dipakai, termasuk www atau enggaknya.
  • Verifikasi selalu gagal padahal sudah dicentang
    Kemungkinan besar Site Key dan Secret Key ketuker atau salah copy-paste. Site Key dipakai di HTML/frontend, Secret Key dipakai di PHP/backend, jangan sampai kebalik.
  • Error “file_get_contents(): SSL operation failed”
    Biasanya karena konfigurasi OpenSSL/CA certificate di server belum lengkap. Kalau pakai shared hosting, biasanya ini otomatis, tapi kalau VPS sendiri, mungkin perlu update CA certificate bundle.
  • reCAPTCHA lambat muncul atau kadang gak keload
    Ini biasanya bukan masalah di kode kamu, tapi karena Google reCAPTCHA API diakses dari server Google yang kadang lambat diakses dari lokasi tertentu. Gak banyak yang bisa dilakuin selain nunggu, atau pertimbangkan pakai alternatif seperti hCaptcha kalau ini jadi masalah serius.

Penutup

Nah bro, segitu dulu cara implementasi Google reCAPTCHA di backend PHP.
Gak ribet, tapi efeknya gede banget buat ngurangin spam dan bot yang gak jelas.

Semoga artikel ini ngebantu lu yang lagi ngamanin form website.
Kalau lu mau versi reCAPTCHA v3, Invisible, atau implementasi di framework kayak Laravel atau CodeIgniter, tinggal bilang aja.

Sampai ketemu di tutorial santai berikutnya.
Tetap aman, tetap ngoding dengan tenang

Jundi Husni Mubaraq

Jundi Husni Mubaraq

Saya seorang software engineer yang sejak awal 2026 megang penuh (sendirian) tanggung jawab infrastruktur server di tempat saya kerja: deploy dan maintain server Linux Ubuntu on-premises, bangun keamanan berlapis pakai CrowdSec dan Cloudflare, kelola job scheduling dan monitoring pakai Cronicle, deploy aplikasi containerized pakai Docker, sampai ngurusin mail server korporat dari nol. Sebelumnya saya 3+ tahun jadi Software Engineer/Fullstack Developer di beberapa perusahaan, termasuk proyek skala internasional (EUDR compliance system buat Lindt & Sprungli) dan sistem rumah sakit (SIMRS, rekam medis elektronik, integrasi BPJS Kesehatan) di RS PKU Muhammadiyah Surakarta. jundi.hm ini tempat saya dokumentasiin apa yang beneran saya kerjain dan pelajarin di lapangan, bukan sekadar riset teori, S.Kom dari Universitas Duta Bangsa Surakarta jadi bekal awal, tapi yang nulis di sini adalah pengalaman langsung ngelola server production sehari-hari. Selengkapnya: https://iam.jundi.hm

Lihat Juga Nih

Selanjutnya Nih

Kasih Komentar

Email kamu gak bakal ditampilin ke publik. Kalau ada tanda ini artinya wajib diisi ya *

Rekomendasi.

Lagi Viral.