Beli Modem Wavecom Untuk SMS Gateway. FREE E-book Gammu + FREE Ongkos kirim !!
Ingin Punya Script SMS Gateway dengan PHP + MySQL?

Dapatkan segera phpSMS V3.0, software SMS Gateway multi fungsi berbasis web buatan saya sendiri untuk keperluan Anda.
[Info Lengkap...]

Mengenkripsi Parameter GET Method Untuk Keamanan


April 28th, 2009 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

GET method adalah jenis request yang sering disalahgunakan oleh orang. Jenis request inilah yang kerap kali digunakan orang untuk menginjeksi suatu perintah atau kode yang tujuannya untuk merusak. Sebut saja misalkan teknik XSS (Cross Site Scripting), SQL injection, dan bahkan spam pun bisa masuk ke dalam buku tamu Anda atau sejenisnya melalui GET method ini.

Beberapa teknik untuk mencegah injection yang telah disebutkan di atas, seperti sql injection, memang telah banyak digunakan. Namun, ada baiknya kita mengantisipasi hal-hal di atas dengan menciptakan suatu URL yang aman melalui teknik enkripsi pada parameter GET methodnya.

Simak lebih lanjut artikel ini untuk mengetahui caranya.

Apa sih request yang berjenis GET method itu? Ya.. GET method adalah request melalui URL atau link. Jenis request ini akan menyebutkan secara eksplisit parameter yang akan diproses pada script tujuan melalui URLnya. Perhatikan contoh URL berikut ini yang akan merequest menggunakan GET method untuk menghitung jumlah dari dua buah bilangan 10 dan 20.

http://namasitus/jumlahkan.php?bil1=10&bil2=20

Dari contoh URL di atas tampak bahwa script jumlahkan.php membutuhkan 2 parameter untuk memproses. Parameter pertama adalah ‘bil1′ yang diberi nilai 10 dan parameter kedua adalah ‘bil2′ yang diberi nilai 20. Nah.. dari sini tampak bahwa kedua parameter tertulis secara eksplisit dalam URL. Hal inilah yang nantinya akan dimanfaatkan orang untuk melakukan injection pada script jumlahkan.php ini.

Trus… bagaimana donk supaya aman, artinya supaya orang tidak tahu nama parameter dan valuenya dari URL yang berasal dari request GET method ini? Ya… jawabannya adalah menggunakan enkripsi. Dalam hal ini hanya parameter dan valuenya saja yang kita enkripsi.

OK.. deh.. gunakan enkripsi, trus… idenya dalam implementasi bagaimana? Ya.. step pertama adalah kita enkripsi terlebih dahulu parameter dan valuenya. Selanjutnya di script pemrosesannya, parameter dan value kita dekrip menjadi parameter dan value yang asli. Nah… barulah parameter dan value itu diproses sebagai input di dalam script pemrosesannya.

The next question… untuk mengenkripsi parameter ini menggunakan metode enkripsi apa? Ya.. Anda bisa menggunakan algoritma enkripsi apapun, asal Anda juga harus bisa melakukan proses dekripnya atau membuat script untuk proses dekripsinya. Atau dengan kata lain, jangan gunakan algoritma enkripsi yang Anda tidak tahu cara mendekripnya, contohnya md5() :-) karena saat ini sepertinya belum ada orang yang bisa membuat dekripsinya.

Bagi Anda yang tidak atau belum mengenal tentang teknik enkripsi, Anda bisa mencoba script yang saya buat untuk proses enkripsi, dekripsi serta melakukan proses decoding. Proses decoding di sini diperlukan untuk membaca setiap nilai parameter dan valuenya.

Dalam script yang saya buat ini, saya gunakan algoritma AES (Advanced Encryption Standard). Adapun modul untuk proses enkripsi dan dekripsi ini saya manfaatkan class yang berasal dari phpclasses.org.

Modul enkripsi dan dekripsi yang berasal dari phpclasses.org sayangnya hanya bisa mengenkripsi dan mendekripsi 16 karakter string saja. Hal ini karena AES pada dasarnya mengenkripsi suatu string dengan panjang 16 karakter. Namun.. mengingat panjang parameter bisa jadi sangat panjang, maka script tersebut saya modifikasi sampai panjang karakter string tak terhingga :-) Alhamdulillah saya bisa memodifikasinya.

[ Download Modul ]

OK… trus.. bagaimana cara menggunakan modul tersebut? Nah.. saya ambil contoh aplikasi sederhana yaitu menjumlahkan dan membandingkan dua bilangan menggunakan request GET method.

Misalkan Anda punya script yang di dalamnya terdapat link untuk melakukan request GET method seperti di bawah ini

<a href="proses.php?bil1=17&bil2=50&action=jumlahkan">Jumlahkan</a>

dan

<a href="proses.php?bil1=166&bil2=150&action=bandingkan">Bandingkan</a>

Nah… untuk mengenkripsi parameternya, gunakan function paramEncrypt(). Contoh:

<?php
include "function.php";
echo "<p><a href='proses.php?".paramEncrypt('bil1=17&bil2=50&action=jumlahkan')."'>Jumlahkan</a></p>";
echo "<p><a href='proses.php?".paramEncrypt('bil1=166&bil2=150&action=bandingkan')."'>Bandingkan</a></p>";
?>

Keterangan:

Script function.php ini harus diincludekan setiap kali perintah paramEncrypt() ini akan digunakan.

Bila script di atas Anda jalankan di browser maka link berparameter tersebut akan berbentuk

<p><a href='proses.php?b19a49e6951a7f9eea3edf67f04422e3c018b3faa88b027d1c7df08c6bc02e33'>Jumlahkan</a></p>
<p><a href='proses.php?8bb81c11c862bf6a435ad5c5dcaf79729469d5f55d02fcec77af7d52ed08cc4a2fe6a4a4fde19a52fc7cbf06d24d0e9e'>Bandingkan</a></p>

Hmm… tidak bisa dibaca bukan nama-nama parameter dan valuenya? :-)

Nah… selanjutnya kita buat script proses.php yang di dalamnya terdapat proses dekripsi dan decoding.

<?php

include "function.php";

// mendecode parameter dan value sekaligus proses dekripsinya
// hasil decoding parameter disimpan dalam bentuk array, misalnya $var

$var = decode($_SERVER['REQUEST_URI']);

// untuk membaca value dari parameter tertentu gunakan $var['nama parameter']

if ($var['action'] == "jumlahkan")
{
    // proses menjumlahkan

    $hasil = $var['bil1'] + $var['bil2'];
    echo "Hasil penjumlahan ".$var['bil1']." dan ".$var['bil2']." adalah : ".$hasil;
}
else if ($var['action'] == "bandingkan")
     {
          // proses perbandingan

          if ($var['bil1'] > $var['bil2']) echo $var['bil1']." lebih besar dari ".$var['bil2'];
          else if ($var['bil1'] < $var['bil2']) echo $var['bil1']." lebih kecil dari ".$var['bil2'];
          else echo $var['bil1']." sama dengan ".$var['bil2'];;
     }
?>

Nah… mudah bukan menggunakannya. Maaf… dalam hal ini saya tidak menguraikan teknik enkripsi, dekripsi dan decodingnya karena algoritmanya sangat panjang.

Selain untuk faktor keamanan, biasanya enkripsi parameter ini juga digunakan dalam program afiliasi marketing, PPC (pay per click) seperti Google Adsense, dan advertising program dalam Facebook. Dalam internet marketing, enkripsi parameter digunakan untuk mengaburkan id affiliate atau url iklan supaya sulit diingat dan mencegah by pass menuju situs tujuan iklan tanpa mengklik iklan tersebut. Wah pinter juga ya para pembuat affiliate program ini? :-)

Mudah-mudahan artikel dan script yang saya buat berguna bagi Anda yang menginginkan keamanan dalam request menggunakan GET method.

VN:F [1.9.3_1094]
Rating: 10.0/10 (1 vote cast)
Mengenkripsi Parameter GET Method Untuk Keamanan, 10.0 out of 10 based on 1 rating
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?



Beberapa artikel terkait


Share this article on:

Kata kunci: aes - enkripsi - get -


Ada 22 komentar dalam artikel ini.

  1. mashardi says:

    klo saya pake url_rewrite pak, lebih mudah dan friendly ke SEO kayaknya, walaupun gak ada enkripsinya sih, hehe

  2. rosihanari says:

    to mashardi: kalo URL_REWRITE memang idealnya digunakan untuk menampilkan artikel seperti halnya di WordPress di fasilitas PERMALINK nya dan betul bahwa URL_REWRITE itu lebih SEO friendly, namun untuk URL yang didalamnya terdapat banyak parameter dan tidak membutuhkan SEO maka enkripsi tersebut lebih baik. Sebagai contoh dalam admin panelnya WordPress, masih tetap menggunakan URL berparameter, dan ini bisa ditambahkan enkripsi supaya lebih baik.

    Barangkali ada mahasiswa yang ingin mengambil topik ini untuk TA (enkripsi URL untuk admin panel WordPress)? :-)

  3. aros says:

    Menurut saya ini blog bagus untuk pembelajaran. saya sangat tertarik dengan artikel-artikel yang disampaikan Pak Rosihan. Mohon maaf saya masih belajar mengenai PHP. Mungkin akan banyak belajar dan bertanya.
    Saya dah coba beberapa Script yang Bapak uraikan dan hasilnya sangat membantu saya. Hanya saja saya menemui kesulitan pada saat download Modul ini di zidu. Mohon bantuan dan petunjuknya, terimakasih.

  4. rosihanari says:

    to aros: mungkin saat itu koneksi Anda ke Ziddu baru sedang ada trouble. Coba di lain waktu mas..

  5. saya bingung sekali pak saat mau buat program untuk ujian tugas akhir syukur saya bertemu anda jadi bisa membantu saya untuk menyelesaikan program dengan tutorial dari anda…

  6. saya berterimaksih sekali pak dengan tutorial dari anda tugas akhir saya bisa terbantu…

  7. rosihanari says:

    to miftahul huda: sama-sama mas…

  8. iroel says:

    Wahh….ini nih yang saya cari, ktemu juga akhirnya. Dulu seh, saya pake base64_encode dan base64_decode. Tapi tetep aja bisa didecrypt di client, coz javascript juga punya :P . Gimana bisa secure klo gitu.

    Thanks ya pak.

  9. aha says:

    mnt bimbingannya : gmn crnya untuk mengurangi panel pada wysiwyg (tynimce) ? dan gmn pula crnya untuk menambahkan agar ‘add image’ bisa ngambil dari komputer. matur nuwun…

  10. thevax says:

    Saya mau mengecript seluruh link yang saya ambil dari database dengan while… tetapi muncul error berikut:
    Fatal error: Cannot redeclare paramencrypt() (previously declared in C:\xampp\htdocs\aes\function.php:4) in C:\xampp\htdocs\aes\function.php on line 23

    bagaimana cara mengatasinya pak, catatan : kalau hanya 1 link yang di encript, tidak muncul error diatas, thx

  11. rosihanari says:

    to thevax: mestinya bisa juga tuh karena dia bentuknya function. Meskipun dalam looping, harusnya function paramencrypt() tetap bisa dipanggil. Coba cek lagi mas, mungkin anda telah mendeklarasikan sebuah function lagi dengan nama yang sama ‘paramencrypt’. Deklarasi functionya sebaiknya satu kali saja.

  12. Abdul Muis says:

    Kebetulan nih dapet artikel yang bagus. Kebetulan juga Saya sedang mencari-cari artikel yang bagus untuk penyusunan skripsi Saya. Saya jurusan teknik informatika.
    Pak rosihan, Apakah artikel bisa dijadikan acuan untuk bahan tugas akhir Saya ?

  13. rosihanari says:

    to abdul muis: silakan saja mas… saya tentu senang tulisan saya diacu alias ada manfaatnya bagi orang lain.

  14. Slm hormat, ada contoh kode delphi pemakaian teknik enkripsi data menggunakan algoritma enkripsi PR dengan jenis enkripsi simetrik dengan tipe stream cipher, fungsi enkripsi telah dibuat dlm file librari dll,sehingga dapat digunakan oleh bahasa pemrograman lainnya yang dapat mengakses file dll, kode pemakaian fungsi enkripsi dapat dilihat di http://www.ciauldownload.blogspot.com pada bagian artikel, terima kasih

  15. arif says:

    Thanks atas ilmunya Pak Rosihan..
    btw klo diterapin url misal dlm database kok valuenya ngga ketangkap ya pak?

  16. rosihanari says:

    @arif: bisa kok mas… coba cek lagi scriptnya ya. Itu berlaku untuk semua GET method…

  17. bapak rosihanari sebelumnya terimakasih atas postingan nya, saya sudah coba tapi dapat kesulitan.. contoh kasusnya misalnya seperti ini.

    <?php
    include "function.php";
    $bil1=17;
    $bil2=50;
    echo "Jumlahkan“;
    echo “Bandingkan“;
    ?>

    begitu link ditekan dan ke halaman proses.php ternyata bil1 dan bil2 yang didapat bukannya nilai yang dibawanya(17 dan 50),, malah justru $bil1 dan $bil2.. jadi tidak berjalan hasil echo nya.. mohon pencerahannya bagaimana supaya dihasil dekrip nilai bil1 dan bil2 yang dibawa adalah 17 dan 50..

    satu lagi ada ngak postingan yang tentang merubah angka kedalam huruf.. misal Rp. 5200000 dirubah menjadi lima juta dua ratus ribu. terimakasih sebelumnya

  18. ridho says:

    permisi numpang tanya
    bagaimana jika saya memakai string $
    kenapa ngak bisa terbaca

  19. rosihanari says:

    @ridho: sebaiknya dihindari mas, karena nanti stringnya dianggap variabel.

  20. rosihanari says:

    @ahmad muhajir: maksudnya gmn ya mas? saya blm paham… untuk membilang bilangan misal 23 menjadi dua puluh tiga, silakan baca http://blog.rosihanari.net/ide-dibalik-pembuatan-script-membilang-bilangan

  21. ridho says:

    permisi numpang tanya lagi
    bagaimana cara menyembunyikan isi variabel get yang sangat rahasia
    contoh :
    database id 1 nama ridho
    id 2 nama rosihanari

    file php
    include”cek.php”;
    $id=$_GET['NIK'];

    kirim.php?id=$id

  22. rosihanari says:

    @ridho: ya gunakan teknik di atas saja mas…



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word