Mengenkripsi Parameter GET Method Untuk Keamanan
April 28th, 2009 | by rosihanari |
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.
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
- Mengatur Digit Desimal Bilangan Real di PHP
- Tentang Letak Script Pengolah Form
- Cara Mengenkripsi Script PHP Supaya Tidak Terbaca
- Teknik Mengirim Data (POST Method) Dari Remote Server Dengan CURL
- Beberapa Tombol Submit dalam Satu Form
- Script PHP Untuk Update Password Administrator
- Manfaat Penggunaan Array dalam Pemrograman
- Penggunaan Cookie untuk Mencegah Submit Ganda pada Polling
- Tips Membuat Script PHP Pengolah Password dengan MD5
- Script PHP untuk Arsip Artikel Berdasarkan Bulan dan Tahun
Share this article on:
Kata kunci: aes - enkripsi - get -





klo saya pake url_rewrite pak, lebih mudah dan friendly ke SEO kayaknya, walaupun gak ada enkripsinya sih, hehe
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)?
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.
to aros: mungkin saat itu koneksi Anda ke Ziddu baru sedang ada trouble. Coba di lain waktu mas..
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…
saya berterimaksih sekali pak dengan tutorial dari anda tugas akhir saya bisa terbantu…
to miftahul huda: sama-sama mas…
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
. Gimana bisa secure klo gitu.
Thanks ya pak.
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…
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
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.
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 ?
to abdul muis: silakan saja mas… saya tentu senang tulisan saya diacu alias ada manfaatnya bagi orang lain.
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
Thanks atas ilmunya Pak Rosihan..
btw klo diterapin url misal dlm database kok valuenya ngga ketangkap ya pak?
@arif: bisa kok mas… coba cek lagi scriptnya ya. Itu berlaku untuk semua GET method…
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
permisi numpang tanya
bagaimana jika saya memakai string $
kenapa ngak bisa terbaca
@ridho: sebaiknya dihindari mas, karena nanti stringnya dianggap variabel.
@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
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
@ridho: ya gunakan teknik di atas saja mas…