Assalamualaikum wr wb, masih dalam nuansa bulan syawal 1437 H, maka saya ucapkan mohon maaf lahir batin dan pada kali ini saya akan sharing tutorial bagaimana cara membuat reCaptcha Google untuk validasi sebuah Form di PHP. Captcha merupakan sebuah metode pengujian yang digunakan untuk membedakan antara manusia dan komputer. Kenapa CAPTCHA penting dalam sebuah bagian dari sekuritas, karena captcha dapat mencegah ancaman sebuah bot yang melakukan penetrasi pada sebuah sistem komputer.
Ada berbagai cara untuk membuat sebuah captcha, tetapi kali ini saya membuat captcha menggunakan reCaptcha dari google. Anda bisa kunjung langsung link berikut untuk informasi lebih lanjut mengenai reCaptcha Google.
Tough on bots
Easy on humans
Protect your website from spam and abuse while letting real people pass through with ease
Membuat reCaptcha Google untuk validasi sebuah Form di PHP
Kali ini saya akan buat reCaptcha untuk memvalidasi user yang akan login pada sebuah aplikasi php, saya disini menggunakan Yii Framework v2. Pertama kita harus mendapatkan api key terlebih dahulu dari reChapta google.
Pilih get reCaptcha dan anda kemudian akan di alihkan ke halaman untuk manage api key, anda akan diminta untuk memasukkan nama label dan domain dari web anda.
Setelah berhasil menginput anda akan diberikan penjelasan step by step bagimana cara memasang reCaptcha pada website anda.
Ngoding Time
Saya kebetulan menggunakan template advance dari Yii2 Framework, saya akan memvalidasi login pada frontend. Untuk dapat menggunakan validasi dari reCaptcha, anda bisa baca dokumentasinya disini, reCaptcha menggunakan method post dengan beberapa parameter yang akan dikirimkan ke server, server akan mengirimkan respone ke website kita dengan nilai TRUE(1) jika verifikasi benar/ sesuai. Anda bisa lihat di bawah ini request dan response Api nya.
Terlebih dulu kita buat sebuah method yang digunakan melakukan request post ke google. Saya menggunakan Curl dan untuk parameternya anda bisa lihat pada manajemen reCaptcha yang anda telah buat. Bagi yang belum mengerti tentang curl, anda bisa lihat pada postingan saya sebelumnya disini.
public function verifiyChap($rechap){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify'); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, "secret=6LcYQCETAAAAABdrfEOmu_sbc0IRFRefrj8xsVPN&response=".$rechap); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $server_output = curl_exec ($ch); $cekServer = json_decode($server_output); curl_close ($ch); if(!empty($cekServer)){ if ($cekServer->success == 1){ return TRUE; }else{ return FALSE; } }else{ return FALSE; } }
Kemudian sesuaikan form login yang akan digunakan.
<?php /* @var $this yii\web\View */ /* @var $form yii\bootstrap\ActiveForm */ /* @var $model \common\models\LoginForm */ use yii\helpers\Html; use yii\bootstrap\ActiveForm; $this->title = 'Login'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="site-login"> <h1><?= Html::encode($this->title) ?></h1> <p>Please fill out the following fields to login:</p> <div class="row"> <div class="col-lg-5"> <?php $form = ActiveForm::begin(['id' => 'login-form']); ?> <?= $form->field($model, 'username') ?> <?= $form->field($model, 'password')->passwordInput() ?> <?= $form->field($model, 'rememberMe')->checkbox() ?> <div style="color:#999;margin:1em 0"> If you forgot your password you can <?= Html::a('reset it', ['site/request-password-reset']) ?>. </div> <div class="form-group"> <?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?> </div> <div class="g-recaptcha" data-sitekey="6LcYQCETAAAAAJ4AvC9BH6b5lBU0BMMhpd38qI3s"></div> <?php ActiveForm::end(); ?> </div> </div> </div>
Sesuaikan method loginnya *saya membuat method login pada satu class yang sama dengan method verifiyChap.
public function actionLogin() { if (!\Yii::$app->user->isGuest) { return $this->goHome(); } $model = new LoginForm(); if ($model->load(Yii::$app->request->post())) { if(SELF::verifiyChap($_POST['g-recaptcha-response'])){ $model->login(); }else{ echo "chapta belum di verifikasi broo"; die(); } return $this->goBack(); } else { return $this->render('login', [ 'model' => $model, ]); } }
Pengujian
Berikut adalah penampakan dari form loginnya yang sudah terpasang reCaptcha Google.
Kita tes melakukan login tanpa mencentang reCaptcha.
Centang reCaptcha, masukkan username dan password yang benar, hasilnya sebagai berikut.
Tadaa, reCaptcha berjalan dengan baik. Sekian tulisan dari saya mengenai pembuatan validasi form menggunakan reCaptcha dari Google, semoga dapat bermanfaat.
Terimakasih.