Mengenkripsi Parameter GET Method Untuk Keamanan

Sharing is caring!

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&#91;'REQUEST_URI'&#93;);

// untuk membaca value dari parameter tertentu gunakan $var&#91;'nama parameter'&#93;

if ($var&#91;'action'&#93; == "jumlahkan")
{
    // proses menjumlahkan

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

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

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.

Tinggalkan Komentar