Langsung ke isi website
Langsung ke navigasi

Artikel PHP/MySQL

  • Home
    • » PHP/MySQL
      • » Membuat Security Number dengan menggunakan GD Library pada PHP

Membuat Security Number dengan menggunakan GD Library pada PHP

Feb 28 2008

Ditulis oleh Dhimas Ronggobramantyo
Kategori: PHP/MySQL
Dibaca 7895 kali

Langsung lihat komentar

Anda pernah melihat angka-angka aneh yang dicorat-coret atau melengkung-lengkung ketika ingin mengisi form? Dan anda diharuskan untuk mengisi angka yang tertera disitu. Atau pada bagian komentar dibawah artikel ini anda juga akan menemukan security number. Saya banyak menerima email dan komentar bagaimana cara membuatnya, nah kali ini saya akan mengajarkan cara membuat security number.

Saya hanya mengajarkan bagaimana membuat Security Number ini, saya tidak akan mengajarkan bagaimana memasangnya di Wordpress, blogspot dan CMS-CMS lainnya. Terus terang pengetahuna saya mengenai Wordpress, blogspot, Jomlaa dan CMS-CMS lainnya hampir tidak tahu apa-apa. Terakhir kali saya memakai CMS sekitar tahun 2001 an waktu itu saya pakai PHPNuke, jadi saya tidak tahu apa-apa tentang CMS jaman sekarang. Tapi saya yakin CMS seperti Wordpress dan kawan-kawan pasti memiliki cara penanggulangan SPAM yang lebih baik daripada security number.

Apa sih gunanya Security Number?

Tentu saja untuk menanggulangi SPAM. Jika dalam website anda memiliki buku tamu atau sistem komentar yang tidak mengharuskan orang-orang untuk login untuk mengisinya, maka 100% website anda akan kena spam. Apa itu spam? jika anda menerima komentar yang tidak diinginkan pada buku tamu atau sistem komentar anda, maka anda bisa menyebutkan itu sebagai SPAM.

Para spammers melakukan SPAM biasanya dengan menggunakan software otomatis (istilah kerennya: bots) yang secara otomatis mengisi form-form yang ada di internet. Nah untuk mencegah software tersebut mengisi form, kita perlu menambahkan sebuah field yang hanya bisa diisi jika pengisinya adalah manusia. Bagaimana caranya? Dengan membuat sebuah angka acak yang ditampilkan sebagai gambar, nah kita diharuskan mengisi angka tersebut. Bagi kita mudah saja untuk mengisi angka, karena kita dapat dengan mudah melihatnya, tapi bagi software otomatis tadi tentu susah untuk membaca angka tersebut.

Software-software spammers sekarang sudah sangat canggih dan sudah mampu membaca security number!!!

CAPTCHA

Apa itu CAPTCHA? CAPTCHA merupakan sebuah program untuk menggenerate andka yang sulit dikenali oleh bots tadi tapi mudah dikenali oleh manusia. Algoritma CAPTCHA yang paling bagus diciptakan oleh Carnegie Mellon University, sayangnya algoritma CAPTCHA merupakan trademark dari Carnegie Mellon University dan algoritma tersebut tidak bisa sembarangan digunakan, algoritma tersebut digunakan oleh Yahoo, Google dan situs-situs besar lainnya. Tapi kita jangan menyerah, jika anda jago anda bisa membuat algoritma sendiri :)

Atau kita bisa juga menggunakan images, jadi kita memiliki kumpulan gambar huruf-huruf dan angka yang berbeda-beda, nah gambar tersebut kita tampilkan secara acak. Atau menggunakan cara saya, cara yang paling sederhana dan nggak perlu banyak mikir :) yaitu menggenerate angka acak biasa kemudian diatasnya kita coret-coret dengan acak. Seperti yang terlihat pada sistem komentar dibawah artikel ini, sangat sederhana :D

Memanfaatkan GD Library dan Session

Untuk membuat gambar didalam PHP kita tentu saja memanfaatkan GD Library. Saya tidak akan mengajarkan GD Library disini, silahkan anda lihat artikel saya yang lalu tentang dasar-dasar GD Library. Dan kita akan memanfaatkan sesssion untuk mengirim nilai pada security number tersebut agar lebih aman. Saya banyak melihat website yang menggunakan security number tetapi jawaban dari angka tersebut tersimpan di form, bisanya disimpan didalam <input type="hidden" />. Atau ada juga yang disimpan didalam link pada browsernya. Kalau begitu sama saja bohong, kita sama saja membuat security number plus jawaban dari angka tersebut. Nah, disini kita akan mengirim jawabannya dengan menggunakan Session, paling tidak agar terenkripsi lah. Oke tidak usah berlama-lama, sekarang anda coba lihat dulu seperti apa hasilnya yang akan kita buat disini.

Pertama-tama kita buat script PHP untuk menggenerate angkanya dulu, buatlah file capcay.php dan isilah dengan kode berikut ini:

<?
$sid=trim($HTTP_GET_VARS["sid"]);
session_id($sid);
session_start();
$angka = $HTTP_SESSION_VARS["angka"];
mt_srand((double)microtime()*1000000);
$jarak1 = mt_rand(0,10);
$jarak2 = mt_rand(0,10);
$jarak3 = mt_rand(0,10);
$jarak4 = mt_rand(0,10);
$ujung1 = mt_rand(0,60);
$ujung2 = mt_rand(0,60);
$ujung3 = mt_rand(0,60);
$ujung4 = mt_rand(0,60);
$ujung5 = mt_rand(0,60);
$ujung6 = mt_rand(0,60);
$ujung7 = mt_rand(0,60);
$ujung8 = mt_rand(0,60);
$warna1 = mt_rand(0,150);
$warna2 = mt_rand(0,150);
$warna3 = mt_rand(0,150);
$warna4 = mt_rand(0,150);
$warna5 = mt_rand(0,150);
$warna6 = mt_rand(0,150);
$height = 13;
$width = 62;
$im = ImageCreate($width, $height);
$background = ImageColorAllocate($im, 255,255,255);
$warnagaris = ImageColorAllocate($im, $warna1, $warna2, $warna3);
$warnaangka = ImageColorAllocate($im, $warna4, $warna5, $warna6);
ImageFill($im, 0, 0, $background);
ImageLine($im, 0, $jarak1, $ujung1, $ujung2, $warnagaris);
ImageLine($im, 0, $jarak2, $ujung3, $ujung4, $warnagaris);
ImageLine($im, 60, $jarak3, $ujung5, $ujung6, $warnagaris);
ImageLine($im, 60, $jarak4, $ujung7, $ujung8, $warnagaris);
ImageString ($im, 6, 10, 0, $angka, $warnaangka);
Imagejpeg($im);
?>

Itu nanti akan menghasilkan images dalam format .jpg, tenang saja akan saya jelaskan nanti, sekarang buatlah file form.php dan isilah dengan kode berikut ini:

<?
$sid = session_id();
if(!$sid){
session_start();
$sid = session_id();
}
if ($submit) {
  if ($code!=$angka) {
    echo "Security number salah.<br />";
  } else {
    echo "Selamat Anda benar menuliskan angkanya";
  }
}
?>
<h4>Kirim Komentar:</h4>
<form method="post" action="<?=$PHP_SELF?>">
<p>
Security Number: <input type="text" name="code" class="textbox" />
<?
mt_srand((double)microtime()*1000000);
$angka1 = mt_rand(0,9);
$angka2 = mt_rand(0,9);
$angka3 = mt_rand(0,9);
$angka4 = mt_rand(0,9);
$angka5 = mt_rand(0,9);
$angka="$angka1$angka2$angka3$angka4$angka5";
$HTTP_SESSION_VARS["angka"] = $angka;
?>
<img src="capcay.php?sid=<?=$sid?>" alt="Security Number" /> <br /><br />
<input type="submit" name="submit" value="Kirim Komentar" />
</p>
</form>

Silahkan anda jalankan form.php, muncul kan angkanya, cukup mudah kan? sekarang akan saya jelaskan satu persatu. Pertama-tama kita bahas form.php. Pada awal form.php kita memiliki kode:

<?
$sid = session_id();
if(!$sid){
session_start();
$sid = session_id();
}

Nah, kode tersebut berfungsi untuk mengambil nilai session yang nantinya akan kita kirim melalui form.php, karena pada awalnya kita belum mengirim apa-apa maka kita lewatkan saja kode tersebut dan langsung perhatikan formnya. PAda form kita memiliki field Security Number: <input type="text" name="code" class="textbox" />, ingat bahwa name nya adalah code, nanti kita perlu melakukan pengencekan code ini dengan angka yang kita generate. Oke berikutnya kita akan menemui:

mt_srand((double)microtime()*1000000);
$angka1 = mt_rand(0,9);
$angka2 = mt_rand(0,9);
$angka3 = mt_rand(0,9);
$angka4 = mt_rand(0,9);
$angka5 = mt_rand(0,9);
$angka="$angka1$angka2$angka3$angka4$angka5";
$HTTP_SESSION_VARS["angka"] = $angka;

Disini kita membuat fungsi random, jadi saya membuat variabel $angka1 s/d $angka5 yang isinya adalah angka acak dari 0 sampai 9. Kemudian ke 5 angka tersebut digabung kedalam variabel angka, $angka="$angka1$angka2$angka3$angka4$angka5";. Nah setelah itu disini kuncinya, kita menyimpan variabel angka kedalam session angka dengan perintah $HTTP_SESSION_VARS["angka"] = $angka;. Yang nantinya session ini akan kita ambil pada awal kode tadi.

Sekarang kita akan membuat gambarnya, anda tentu sudah tahu cara menampilkan gambar pada HTML, disini yang kita load bukan gambar tetapi file PHP yang telah menjadi gambar <img src="capcay.php?sid=<?=$sid?>" alt="Security Number" />. Perhatikan, kita perlu mengirim nilai session tersebut kedalam capcay.php yang nantinya akan diproses oleh capcay.php. Nilai session tersebut sudah tersimpan pada variabel $sid karena pada awal kode kita sudah mengisi $sid dengan session $sid = session_id();. Sampai sini, sistem mulai memproses file cpacay.php dengan mengirim session yang berisi angka-angka yang benar. Kita akan bahas capcay.php belakangan. Dan ketika seseorang mengklik tombolnya maka sistem akan memproses kembali file form.php dari awal dan kembali mengambil session tersebut.

Karena anda telah menekan tombol submit, maka bagian kode dibagian atas ini akan dijalankan.

if ($submit) {
  if ($code!=$angka) {
    echo "Security number salah.<br />";
  } else {
    echo "Selamat Anda benar menuliskan angkanya";
  }
}

Itu merupakan kode sederhana untuk melakukan pengecekan apakah angka yang kita masukkan (variabel $code) sudah sama dengan angka yang kita generate yang tadi kita kirim melalui session (variabel $angka). Jika sudah sama silahkan anda tulis perintah yang diinginkan dan jika salah juga silahkan anda ingin sistem melakukan apa.

Oke, mudah kan sekarang kita akan bahas file capcay.php yang tadi kita panggil sebagai images. Sebenarnya file capcay.php hanya menggenerate angka yang kita kirim melalui session dan dicoret-coret. Jika anda membuka file capcay.php saja maka anda hanya akan menemukan coret-coretan tanpa adanya angka.

Pada bagian awal kode di file capcay.php kita akn menemukan kode seperti ini:

$sid=trim($HTTP_GET_VARS["sid"]);
session_id($sid);
session_start();
$angka = $HTTP_SESSION_VARS["angka"];

Kode tersebut berguna untuk mengambil session yang kita kirim pada form.php tadi, session tersebut tentu saja berisi angka acak yang kita buat pada form.php tadi. Dan kita simpan isinya pada variabel angka, $angka = $HTTP_SESSION_VARS["angka"];.

Setelah itu anda akan melihat variabel jarak, ujung dan warna. Untuk menggambar garis kita menggunakan fungsi imageline ( resource $image, int $x1, int $y1, int $x2, int $y2, int $color). Nah untuk mengisi x1, y1, x2, y2 dan warna saya menggunakan nilai acak (random) yang saya simpan di variabel jarak, ujung dan warna. Dengan demikian garis-garis yang muncul dan warna yang muncul tidak akan pernah sama. Coba perhatikan kode berikut ini:

$height = 13; 
$width = 62;
$im = ImageCreate($width, $height);
$background = ImageColorAllocate($im, 255,255,255);
$warnagaris = ImageColorAllocate($im, $warna1, $warna2, $warna3);
$warnaangka = ImageColorAllocate($im, $warna4, $warna5, $warna6);
ImageFill($im, 0, 0, $background);
ImageLine($im, 0, $jarak1, $ujung1, $ujung2, $warnagaris);
ImageLine($im, 0, $jarak2, $ujung3, $ujung4, $warnagaris);
ImageLine($im, 60, $jarak3, $ujung5, $ujung6, $warnagaris);
ImageLine($im, 60, $jarak4, $ujung7, $ujung8, $warnagaris);
ImageString ($im, 6, 10, 0, $angka, $warnaangka);
Imagejpeg($im);

Variabel $width dan $height merupakan panjang dan tinggi bidang gambar kita. KEmudian kita membuat bidang gambar $im = ImageCreate($width, $height); yang disimpan dalam variabel $im. Setelah itu saya membuat background putih $background = ImageColorAllocate($im, 255,255,255); dan memberi warna pada garis dan angkanya, nilai warnanya acak yang telah kita buat pada variabel angka tadi $warnagaris = ImageColorAllocate($im, $warna1, $warna2, $warna3); dan warna angka $warnaangka = ImageColorAllocate($im, $warna4, $warna5, $warna6);.

Berikutnya kita menggambar bidangnya dengan memberi warna putih, ImageFill($im, 0, 0, $background);. Setelah itu kita membuat 4 coretan yang acak dan berbeda-beda dengan fungsi ImageLine($im, 0, $jarak1, $ujung1, $ujung2, $warnagaris); dst. Untuk menuliskan angka yang sudah kita dapatkan tadi, kita menggunakan fungsi imagestring (resource $image, int $font, int $x, int $y, string $string, int $color) dimana tadi kita menggunakan variabel $angka dan untuk warnanya kita menggunakan warna acak dari variabel $warnaangka, ImageString ($im, 6, 10, 0, $angka, $warnaangka);

Langkah terakhir adalah dengan membuatnya menjadi gambar jpg menggunakan fungsi Imagejpeg($im);. Selesai sudah gambar anda sudah tampil yang berisi angka-angka acak, dan angka-angka itu juga dikirim melalui session agar kita bisa melakukan pengecekan.

Bingung? pada file capcay.php itu hanya berisi fungsi-fungsi dasar dari GD Library, jadi pastikan bahwa anda telah mengerti dasar-dasar GD Libary. Jika anda kreatif anda dapat menggambar coretan yang lebih bagus, angka yang lebih menarik dan semakin sulit dibaca. Tetapi perlu diingat juga dalam membuat security number jangan sampai terlalu sulit dibaca oleh manusia. Tujuan membuat security number agar manusia dapat dengan mudah membacanya, tetapi mesin akan kesulitan membacanya.

Jika gambar tidak muncul, pastikan GD Library anda sudah aktif. Tanyakan pada jasa penyedia hosting anda mengenai cara mengaktifkan GD Library di server anda.
Simpan artikel ini ke: Digg it Del.icio.us Furl Reddit

Komentar [37]

1
Komentar Dikirim oleh JAY pada 10 Maret 2008 11:05:29 WIB

Bagus banget Artikelnya.... semoga pahala ente banyak...' dan jangan sombong lho .. he he he

2
Komentar Dikirim oleh arby pada 26 Maret 2008 08:59:17 WIB

very good..... saluut 4 u...

3
Komentar Dikirim oleh sopian pada 31 Maret 2008 04:40:53 WIB

mas gimana ya cara dapetin hosting

4
Komentar Dikirim oleh doez pada 09 April 2008 08:23:44 WIB

keren banget

5
Komentar Dikirim oleh doez pada 09 April 2008 10:27:38 WIB

mas sebelumnya saya mainta maaf nih, because tutorial securyti number mas kok nda bisa yach.......
mohon bantuannya call doez_entoz

6
Komentar Dikirim oleh doez pada 09 April 2008 10:28:38 WIB

YM ya, thanks

7
Komentar Dikirim oleh Dhimas Ronggobramantyo pada 13 April 2008 04:39:39 WIB

@ doez
Pastikan gd library nya udah aktif, cek php.ini cari #extension=php_gd2.dll terus dihapus tanda pagarnya

8
Komentar Dikirim oleh www.sampara.com pada 20 Juni 2008 05:09:31 WIB

wah thanks ya buat tipnya berguna bangat

Dari : Dari www.sampara.com

9
Komentar Dikirim oleh royen pada 23 Juni 2008 09:17:48 WIB

saya ingin mengetahui bagai mana cara, membuat security pada email yg dirancang pada wibsite pribadi kita, sehigga tidak sembarang orang bisa membuka dan pada orang lain mendaftar menjadi anggota, adanya folder disediakan khusus sebagai penampung datanya dan tidak satupun yang bisa membuka kecuali yang punya email.

10
Komentar Dikirim oleh royen pada 23 Juni 2008 09:18:04 WIB

saya ingin mengetahui bagai mana cara, membuat security pada email yg dirancang pada wibsite pribadi kita, sehigga tidak sembarang orang bisa membuka dan pada orang lain mendaftar menjadi anggota, adanya folder disediakan khusus sebagai penampung datanya dan tidak satupun yang bisa membuka kecuali yang punya email.

11
Komentar Dikirim oleh junaedi pada 24 Juni 2008 10:27:48 WIB

saya ingin buat back graun pada friendster saya jdi g mana caranya

12
Komentar Dikirim oleh Igun Gunawan pada 25 Juni 2008 01:57:31 WIB

bantu jawab yang ga bisa, coba bagian ini dirubah seperti ini :


aku juga barusan g jalan, setelah utak-atik dikit jalan dech ...

tanks buat penulis ...

13
Komentar Dikirim oleh Igun Gunawan pada 25 Juni 2008 01:58:39 WIB

bantu jawab yang ga bisa, coba bagian ini dirubah seperti ini :
[code]


[/code]

aku juga barusan g jalan, setelah utak-atik dikit jalan dech ...

tanks buat penulis ...

14
Komentar Dikirim oleh Igun Gunawan pada 25 Juni 2008 02:00:11 WIB

weleh dah duakali kena filter nih boss ...

bantu jawab yang ga bisa, coba bagian ini dirubah seperti ini :

[code]

$sid = session_id();
if(!$sid){
session_start();
$sid = session_id();
}
if (isset($_POST['submit'])) {
if ($_POST['code']!=$_SESSION['angka']) {
echo "Security number salah.";
} else {
echo "Selamat Anda benar menuliskan angkanya";
}
}

[/code]

aku juga barusan g jalan, setelah utak-atik dikit jalan dech ...


tanks buat penulis ...

15
Komentar Dikirim oleh Arman Efendi pada 27 Juni 2008 10:11:25 WIB

Terima Kasih atas script PHP nya yah ?

16
Komentar Dikirim oleh Mario Paul pada 10 Juli 2008 09:23:21 WIB

bagemana c cara kerja captcha itu, sehingga bisa menghalang spam?

17
Komentar Dikirim oleh teguh widodo pada 23 Juli 2008 09:40:51 WIB

wduh aku bingung,wong aku durung kenal kambe program,jadi bengon hehe and makasih buat belajar md2 ente dpt pahalanye

18
Komentar Dikirim oleh aryalangu pada 25 Juli 2008 02:55:44 WIB




Ungkapan tankyu dan permintaan

mas lam kenal sebelumnya ....
makasih atas artikel nya .....
oia mas minta artikel yang membahas tentang paging dong dan pemberian password&gt;...
matur nuwun...

saya tunggu yaaaa...

19
Komentar Dikirim oleh vianika pada 02 Agustus 2008 11:53:22 WIB

untuk yang keberapakalinya saya kagummmmmm....smile)

20
Komentar Dikirim oleh eka pada 14 Agustus 2008 03:38:03 WIB

thanks banget niyh artikelnya... smile

21
Komentar Dikirim oleh Made Su pada 05 September 2008 01:36:08 WIB

Trims atas artikelnya....salut deh atas kemurahannya bagi-bagi ilmu...

22
Komentar Dikirim oleh pndwr pada 05 September 2008 02:07:46 WIB

mantap langsung sedot deh....

23
Komentar Dikirim oleh Budiman pada 11 September 2008 10:28:21 WIB

makasih ya mas....

24
Komentar Dikirim oleh Totok pada 23 September 2008 05:23:31 WIB

Artikel yang menarik, tks sharing ilmunya.
http://170869.com

25
Komentar Dikirim oleh fairuz zabadi pada 27 Oktober 2008 05:02:57 WIB

kok nggak jalan sih scriptnya ?
muncul sih gambarnya tapi waktu disi dng benar
gk da tulisan benar / salah

26
Komentar Dikirim oleh Awank KostBlogger.com pada 26 Januari 2009 01:18:08 WIB

lumayan buat nambah pengalaman

27
Komentar Dikirim oleh brands pada 01 Februari 2009 11:09:55 WIB

gw bgt artikelnya bro cuma kenapa saya gak paham-paham ya????

28
Komentar Dikirim oleh joe pada 19 April 2009 02:00:04 WIB

saya dah coba ikut scriptnya tapi ko gambarnya belum juga kelihatan yach,vmare saya dah saya instal consolenya,mohon bantuannya yach
muhammadrano26@yahoo.com
tolong yach kasih tau solusinya

29
Komentar Dikirim oleh yahyaz pada 11 Mei 2009 10:27:34 WIB

subhanallah, artikelnya bagus banget. makasih yaah. mudah-mudahan dilancarkan rizkinya. Aamiin

30
Komentar Dikirim oleh ismail pada 12 Mei 2009 11:29:50 WIB

bagaimana cara maengaktifkan GD library...?

31
Komentar Dikirim oleh Mau Pintar pada 21 Juni 2009 11:17:12 WIB

Saya punya referensi nih buat yang mau lebih lanjut tentang PHP dan Ilmu Komputer lainnya, submit aja ke http://mr-amateur.co.cc.
disitu lengkap banget lho...

32
Komentar Dikirim oleh agus dwipayana pada 13 Juli 2009 11:23:07 WIB

security code di localhost (php) tampil
tapi pada waktu di web.. security code kosong / captcha tidak ada.. cuman ada input textnya saja
mohon di bantu

33
Komentar Dikirim oleh agus dwipayana pada 04 Agustus 2009 03:39:24 WIB

pak kenapa security code pada waktu di server hosting tidak muncul/tidak aktif.. sedangkan dilocalhost security code muncul/aktif
sekian n terima kasih

34
Komentar Dikirim oleh uzi pada 11 November 2009 09:19:03 WIB

yang lebih mudah dimenarti dong

35
Komentar Dikirim oleh etet pada 29 November 2009 10:18:55 WIB

wetwey

36
Komentar Dikirim oleh etet pada 29 November 2009 10:20:19 WIB

wetwey

37
Komentar Dikirim oleh aenur pada 07 Desember 2009 10:41:59 WIB

thank berat mas....

Kembali keatas

Kirim Komentar:



Security Number