Anda mempunyai website yang mengijinkan pengunjung untuk memasukkan kontent ke website Anda tanpa harus login? Misalnya form komentar, buku tamu dan lain-lain. Untuk menghindari spamming atau otomatisasi, metode yang paling umum adalah memasang kode captcha dalam bentuk gambar atau yang lainnya. Untuk metode gambar sebenarnya masih mempunyai kelemahan, karena kita bisa mengakses gambar tersebut secara remote atau tanpa harus mengunjungi website. Oleh karena kelemahan tersebut website kita masih bisa di otomatisasi atau memasukkan konten tanpa harus mengunjungi website tersebut.
Cara sederhana berikut bisa digunakan untuk mencegah terjadinya hal di atas. Skenarionya adalah kita membuat kode unik setiap kali halaman form kita di load, kode unik tersebut kita simpan dalam COOKIE atau SESSION dan pada form isian kita tambahkan satu hidden field yang berisi kode unik tersebut. Pada saat form di submit kita cocokkan value pada hidden field dan value pada COOKIE atau SESSION. Jika tidak cocok maka proses pemasukan data tersebut tidak dilanjutkan.
Contohnya adalah sebagai berikut menggunakan PHP. Untuk membuat kode unik kita bisa gunakan fungsi microtime dan untuk lebih mantap kita encrypt kode unik tersebut menggunakan md5 atau sha1, sebagai contoh saya menggunakan sha1.
$kodeunik = sha1(microtime());
kemudian kita simpan dalam COOKIE atau SESSION. Jika Anda menggunkan COOKIE pastikan bahwa COOKIE diset sebelum ada header yang dikirimkan.
setcookie('kodeunik', $kodeunik, 0, '/', ''); //Jika menggunakan COOKIE atau $_SESSION['kodeunik'] = $kodeunik; //Jika menggunakan SESSION
Kemudian pada form isian kita tambahkan hidden field
<form action="" method="post"> <input type="hidden" name="kodeunik" value="<?php echo $kodeunik; ?>" /> </form>
Pada validasi input kita tambahkan baris sebagai berikut.
$kodeunik = $_COOKIE['kodeunik']; //Jika menggunakan COOKIE atau $kodeunik = $_SESSION['kodeunik']; // Jika menggunakan SESSION if( $kodeunik != $_POST['kodeunik'] ){ die('Silahkan kunjungi website kami.'); }
Saya sendiri sudah mencobanya dan sampai saat ini cukup efektif untuk mencegah remote submit. Selamat mencoba!