You are on page 1of 25

Keamanan Pada Aplikasi Web dengan PHP

Implementasi Metode MD5 Kriptography Pada Aplikasi Web

Nama : Anda Maramiz

NIM : 59061002005

Fakultas Ilmu Komputer

Universitas Sriwijaya
Pendahuluan

Komunikasi adalah hal yang mendasar dari kehidupan manusia. Dikarenakan manusia
adalah mahluk sosialis maka manusia tidak akan berhenti untuk saling berinteraksi satu sama
lain. Namun masalah timbul mana kala manusia yang berjauhan tempatnya ingin
berkomusikasi. Manusia kemudian berinisiatif untuk membangun alat komunikasi seperti
contohnya telegraf, radio, dan telepon. Namun alat-alat komunikasi tersebut tidak dapat
mencukupi kebutuhan manusia akan komunikasi yang cepat dan efektif. Maka kemudian
diciptakan Internet. Salah satu metode komunikasi yang sangat cepat dan hemat serta dapat
menjangkau seluruh belahan dunia. Sehingga sampai saat ini komunikasi menggunakan internet
sangat digemari oleh manusia dan mereka dapat menjelajahi dunia hanya dengan duduk di depan
computer mereka sendiri.

Komunikasi dengan internet bukan hanya terfokus pada komunikasi antara sesama manusia
namum mulai merambah pada dunia kerja. Perusahaan-perusahaan dimana pun di dunia memakai
teknologi ini. Setiap perusahaan mulai mempromosikan produk-produk andalan mereka melalui
internet ataupun sekedar menyambungkan jaringan mereka ke internet untuk mencari informasi
sebanyak-banyaknya. Penggunaan aplikasi website pun dilakukan demi terwujudnya keinginan
perusahaan tersebut. Bahasa pemrograman yang cukup terkenal dan paling banyak dipakai untuk
membuat aplikasi website adalah bahasa pemrograman PHP.

Namun persaingan yang tidak sehat antara perusahaan-perusahaan tersebut mengakibatkan


munculnya tangan-tangan jahil yang ingin mengetahui atau merubah data atau isi komunikasi untuk
kepentingan sepihak. Dan berkembang bukan hanya antara perusahaan-perusahaan namun
berkembang pula dikalangan muda yang didukung oleh mudahnya mendapatkan referensi atau buku
mengenai cara mengubah atau mengetahui data atau isi komunikasi. Karena itu pentingnya menjaga
kerahasiaan data atau integritas data sangatlah penting demi menghindari kejadian-kejadian yang
merugikan.

Penggunaan aplikasi website dengan menggunakan bahasa pemrograman PHP sangat banyak
digunakan oleh para pengembang namun dari sisi keamanan data bahasa ini sangat rentan terhadap
serangan. Rentannya bahasa pemrograman ini disebabkan oleh tangan-tangan jahil yang
memanfaatkan kesalahan dalam pemrograman yang nanti akan dibahas lebih lanjut. Seperti yang kita
ketahui, aplikasi website adalah konsumsi publik sehingga pengembang tidak akan dapat memastikan
siapa pengguna atau user yang memakai aplikasi tersebut apakah pengguna ini berniat baik atau
buruk. Untuk mengantisipasi permasalahan tersebut aplikasi website juga ditambah dengan
penggunaan salah satu metode kriptography yaitu MD5 atau fungsi hash. Namun yang patut
diketahui, penggunaan MD5 bukan untuk merahasiakan data atau pesan akan tetapi untuk menjaga
otentifikasi data sehingga data satu dengan data yang telah terkirim tidak akan diubah-ubah untuk
kepentingan yang lain.

Metode Penelitian

Tulisan ini membahas mengenai bahasa pemrograman PHP, celah-celah kesalahan dalam
bahasa tersebut, contoh pola serangan, dan MD5 kripthography serta peranannya dalam keamanan
data dengan menggunakan studi literature terhadap website dan jurnal ilmiah.

Landasan Teori
PHP

PHP adalah bahasa pemrograman script yang paling banyak dipakai saat ini. PHP banyak
dipakai untuk memprogram situs web dinamis, walaupun tidak tertutup kemungkinan digunakan
untuk pemakaian lain. PHP pertama kali diciptakan oleh Rasmus Lerdorf pada tahun 1995. PHP atau
diciptakan menyerupai sebuah software yang tujuan utamanya adalah membantu pembuatan
homepage pribadi dengan bahasa yang mudah digunakan. Selanjutnya Rasmus Lerdorf merilis script
tersebut untuk public dan menamainya PHP/FI atau Hypertext Preprocessing'/Form Interpreter. Pada
November 1997, dirilis kembali PHP/FI 2.0. Pada seri inilah PHP telah dilengkapi oleh program C
yang berdampak pada kemudahan bahasa serta dilengkapi oleh modul-modul ekstensi yang
meningkatkan kemampuan PHP/FI secara signifikan. Namun pada tahun yang sama, sebuah
perusahaan bernama Zend milik 2 mahasiswa Israel menulis kembali bahasa PHP menjadi lebih
bersih, lebih baik, dan lebih cepat. Kemudian pada Juni 1998, perusahaan tersebut merilis bahasa baru
untuk PHP dan merilisnya sebagai PHP 3.0 dan menganti namanya menjadi personal homepage. Pada
pertengahan tahun 1999, Zend merilis kembali bahasa PHP terbaru yang kita kenal sebagai PHP 4.0
yang merupakan versi yang banyak dipakai dikarenakan kemampuannya membangun aplikasi website
kompleks akan tetapi tetap memiliki kecepatan dan stabilitas yang tinggi. Dan Juni 2004, Zend merilis
PHP 5.0. Dalam versi ini inti dari bahasa PHP mengalami perubahan yang besar. Versi ini
memasukan model pemrograman berorientasi objek kedalam bahasa PHP untuk menjawab
perkembangan bahasa pemrograman kearah paradigma berorintasi objek.

Kelebihan-kelebihan pada bahasa pemrograman PHP adalah

• Web server yang mendukung PHP dapat ditemukan dimana-mana dari mulai IIS
sampai dengan apache, dengan configurasi yang relative mudah.

• Bantuan dan referensi dalam pengembangan bahasa PHP sangat mudah didapat dan
ini sangat membantu mengembangan bahasa pemrograman ini.

• PHP adalah bahasa open source yang dapat digunakan di berbagai OS (linux,
window, atau yang lainnya) dan dapat melakukan runtime melalui console serta dapat
menjalankan perintah-perintah system.

Dari mulai penamaan file php menggunakan ekstensi .php seperti file-file html dan disimpan
dalam file text biasa. Ada 4 macam cara penulisan source code PHP yaitu:

1. <? Echo (“bla…bla….bla”); ?>

2. <?php Echo (“bla…bla….bla”); ?>

3. <script language="php"> echo ("bla….bla….bla.."); </script>


4. <% echo ("bla…bla…bla"); %>

Namun cara yang paling sering dipakai adalah cara nomor 1 dan 2 dan sama seperti bahasa
pemrograman C dan C++, PHP juga menyertakan ( ; ) pada akhir source code.

Dalam bahasa PHP juga mengenal proses looping ada 4 jenis looping pada PHP yaitu

1. Looping menggunakan while

Gambar 1

Seperti yang dapat kita lihat pada gambar, Syntax while pada PHP hampir
menyerupai syntax pada bahasa pemrograman C dan C++. Sesuai kondisi while akan
memproses ulang apa yang ada di dalam prosesnya dan berhenti ketika kondisi itu
terpenuhi.

2. Looping menggunakan for

Gambar 2

Tak jauh berberda dengan looping menggunakan while dan syntaxnya tetap
mengadopsi dari bahasa pemrograman C dan C++.

3. Menghentikan Looping
Gambar 3

Fungsi break; pada syntax diatas adalah untuk memberhentikan looping walaupun
kondisi yang diinisialisasi diatas belum terpenuhi.

4. Continue Looping

Gambar 4

Fungsi continue dalam syntax diatas hanya untuk melanjutkan looping setelah
memasuki sebuah kondisi. Namun perintah ini jarang digunakan dikarenakan jika
tidak memakai perintah ini looping akan tetap berjalan setelah memasuki kondisi ini.

Setelah cara penulisan dan looping pada PHP hal penting yang harus diketahui dari PHP
adalah sub-rutin. Sub-rutin adalah sebuah potongan program yang diberi nama dan dapat dipanggil
berkali-kali. Dan dalam bahasa pemrograman terdapat 2 jenis sub-rutin yaitu prosedur dan fungsi.
Dan cara penulisan sub-rutin adalah

Function nama_sub-rurin (argument atau parameter)


{ Isi dari program atau sub-rutin }

Fungsi pun ada 5 jenis sesuai dengan kebutuhannya yaitu fungsi require, funsi include, fungsi
string, fungsi date dan time dan fungsi variabel.

Fungsi Require

Definisi dari fungsi require adalah fungsi yang dapat membaca nilai variable dan fungsi-fungsi dari
file PHP yang lainnya.

Cara penulisan fungsi require adalah require(“nama file”);

Namun fungsi ini tidak dapat dimasukan dalam proses looping baik itu for ataupun while dikarenakan
fungsi ini hanya diperbolehkan memanggil file yang sama satu kali saja.

Fungsi Include

Definisi dari fungsi include adalah fungsi yang dapat memanggil keseluruhan isi file tertentu.

Cara penulisan fungsi include adalah include(“nama file”);

Lain halnya dengan fungsi require, fungsi include dapat dimasukan dalam proses looping.

Fungsi String

Dibandingkan dengan fungsi sebelumnya, fungsi string adalah fungsi yang paling banyak memiliki
syntax namun pada tulisan ini hanya akan dibahas sebagian saja. Definisi dari fungi string adalah
fungsi yang digunakan untuk memanipulasi data string yang ada dalam file PHP.

Contoh fungsi string adalah

1. Addslashes

Fungsi ini digunakan untuk menambah karakter backslash pada suatu string. Hali ini
penting digunakan pada query string untuk database, misalnya pada database MySql.

Sintax : addslashes(string).

2. Crypt

Fungsi ini digunakan untuk mengacak data atau men-encrypt data dengan modul
DES. Fungsi ini sering digunakan untuk mengacak password yang ada dalam
database. Dalam syntax crypt terdapat parameter yang sering disebut sebagai salt.
Parameter salt berfungsi untuk menentukan basis pengacakan oleh PHP namun
jikalau parameter salt tidak terisi maka engine PHP akan menentukan sendiri basis
pengacakannya.

Sintax : crypt(string[,salt]).

3. Echo dan print.

Fungsi ini digunakan untuk mencetak atau menampilkan isi suatu text dan argunem
ke browser.

Sintax : echo (string argumen1, …); atau print (string argumen1, …);

4. Explode

Fungsi ini digunakan untuk memecah suatu string berdasarkan suatu tanda pemisah
tertentu kemudian memasukannya ke dalam suatu variable tertentu.

Sintax : explode (string pemisah, string[, int limit]);

Fungsi Date dan Time

Fungsi date dan time berfungsi untuk memanggil tanggal dan jam sekarang. Dan kemudian menulis
kembali sebagai hasil akhir dalam format yang diinginkan.

Contoh fungsi date dan time :

1. Getdate

Fungsi ini digunakan untuk menghasilkan waktu yang keluarannya menjadi array.
Dan pemanggilannya memakai kata kunci seperi hour untuk jam dan minute untuk
menit sebagai variable array.

Sintax : getdate();

2. Checkdate

Fungsi ini digunakan untuk mengecek apakah format tulisan telah benar.

Sintax : checkdate($bulan,$hari,$tahun);

Fungsi Variabel

Fungsi ini berfungsi sederhana yaitu menginisialisasi nilai suatu variable atau untuk mengecek
keberadaan variable.
Contoh dari fungsi variable :

Fungsi Variabel Keterangan

Duoblevar($var) Mengubah variable $var menjadi


double.

Isset($var) Memeriksa apakah variable $var


telah didefinisikan sebelumnya.

Is_array($var) Memeriksa apakah variable $var


adalah sebuah array.

Kriptography

Seperti yang telah dijelaskan diawal bahwa di zaman persaingan seperti sekarang ini sangat
penting untuk menjaga kerahasiaan data. Dan untuk menjawab permasalahan tersebut terdapat suatu
metode keamanan data yaitu kriptography.

Kriptography adalah sebuah ilmu dan dapat pula diibaratkan sebagai seni yang mengatur
kerahasiaan data dan menyembunyikan informasi untuk mencegah pihak yang tidak berhak
membacanya atau pihak yang tidak bertanggung jawab yang ingin merubahnya. Dan proses
kriptography ini dibutuhkan sebuah algoritma tertentu untuk merubah tampilan datanya menjadi tidak
dimengerti. Kriptography terbagi menjadi dua yaitu kriptography klasik dan kriptography modern.
Kriptography klasik lebih menekankan pada kerahasiaan algoritmanya sehingga jikalau kerahasiaan
algoritmanya telah terbongkar maka algoritma tersebut tidak dapat dipakai lagi. Namun pada
kriptography modern, kerahasiaan bukan bertumpu pada algoritmanya namun bertumpu pada
kerahasiaan kuncinya. Dengan kata lain algoritmanya dapat diketahui publik dengan mudah namun
karena itu lah algoritma tersebut dapat dicoba oleh para criptanalist seberapa tangguh algoritma
tersebut. Semakin banyak waktu dan biaya yang dikeluarkan untuk memecahkan algoritma tersebut
maka semakin tangguh lah algoritma tersebut.

Dalam kriptography terdapat 2 proses yaitu enkripsi dan dekripsi. Enkripsi adalah proses
merubah sebuah tampilan data menjadi bentuk yang tidak terbaca tanpa kunci tertentu. Tujuannya
adalah untuk menjaga privasi atau kerahasiaan data dari orang-orang yang tidak ditujukan. Sedangkan
proses dekripsi adalah proses mengembalikan tampilan data dari proses enkripsi menjadi bentuk
semula. Proses enkripsi dan dekripsi pada umumnya membutuhkan kunci untuk meng-kriptography
komunikasi data. Dan ini membedakan teknologi kriptography menjadi symmetric key dan
asymmetric key.
Symmetric key adalah algoritma kriptography yang hanya membutuhkan kunci yang sama
untuk meng-enkripsi dan meng-deskripsi data sedangkan asymmetric key adalah algoritma
kriptography yang membutuhkan 2 kunci masing-masing untuk meng-enkripsi dan meng-deskripsi
data. Namun kriptography saat ini bukan hanya terpaku pada enskripsi dan deskripsi saja namun
kriptography juga telah menyiapkan teknologi yang dipakai untuk menjaga otentifikasi dan integritas
data. Digital Signature yang lebih sering kita kenal sebagai MD5 kriptography.

MD5 kriptography digunakan secara luas dalam dunia perangkat lunak untuk menyediakan
semacam jaminan bahwa file yang diambil (download) belum terdapat perubahan. Seorng user dapat
membandingkan MD5 sum yang dipublikasikan dengan checksum dari file yang diambil. Dengan
asumsi bahwa checksum yang dipublikasikan dapat dipercaya dan tejamin keasliannya, seorang user
dapat secara yakin bahwa tersebut adalah file yang sama dengan file yang dirilis oleh para developer,
jaminan perlindungan dari Trojan Horse dan virus komputer yang ditambahkan pada perangkat lunak.
Bagaimanapun juga, seringkali kasus yang terjadi bahwa checksum yang dipublikasikan tidak dapat
dipercaya (sebagai contoh, checksum didapat dari channel atau lokasi yang sama dengan tempat
mengambil file), dalam hal ini MD5 hanya mampu melakukan error-checking. MD5 akan mengenali
file yang didownload tidak sempurna, cacat atau tidak lengkap.

Prinsip kerja dari fungsi hash ini adalah mengambil pesan yang mempunyai panjang variable
dan diubah menjadi ‘sidik jadi’ yang mempunyai panjang variable tetap yaitu 128 bit. ‘Sidik jari’ ini
tidak dapat dibalik untuk mendapatkan pesan, dengan kata lain tidak ada orang yang dapat melihat
pesan dari ‘sidik jari’tersebut. Dan fungsi inti MD5 adalah untuk melindungi data dari modifikasi
yang tidak terdeteksi, dapat dihitung hasil fungsi hash dari data tersebut, selanjutnya dapat
menghitung hasil fungsi hashnya lagi dan membandingkannya dengan hasil fungsi hash yang
sebelumnya apabila terjadi perubahan selama pengiriman.

5 8
6

7
x1 x1 ‘ x1 ‘ x1 11
9
2 3

4 10
Gambar 5
Keterangan :

1. Message

2. Fungsi hash atau MD5

3. Proses enkripsi data

4. Kunci publik

5. Penyertaan digital signature pada message asli

6. Message

7. Digital signature

8. Fungsi hash atau MD5

9. Proses dekripsi data

10. Kunci private

11. Perbandingan

Pada proses diatas dapat kita lihat dengan jelas bahwa MD5 atau fungsi hash tidak ditujukan
untuk merahasiakan data namun untuk pengecekan kebenaran data. Dimulai dari pesan yang akan
dikirim oleh pihak pengirim, terdapat 2 proses yaitu pengiriman pesan langsung dan proses peng-
enkripsian data ditambah penyertaan ‘sidik jari’. Proses penambahan sidik jari dimulai dari merubah
pesan menjadi 128 bit dan kemudian di enkripsi oleh kunci public dan disertakan ke dalam pesan
yang asli. Kemudian proses dilanjutkan kepada pihak penerima proses pun terbagi menjadi 2 menjadi
pembuatan ’sidik jari’ dan kemudian peng-deskripsian digital signature yang telah disertakan
sebelumnya. Jika pesan yang baru saja dibuat ‘sidik jarinya’ dan hasil deskripsi dari digital signature
sebelumnya dinyatakan sama, maka pesan yang terkirim telah sepenuhnya benar dan tidak dibubuhi
oleh virus atau dirusak ditengah jalan.
Pembahasan

Sepeti yang telah dijelaskan sebelumnya bahwa tulisan ini membahas tentang kesalahan-
kesalahan atau vulnerability yang ada pada bahasa PHP. Kelemahan keamanan bahasa PHP meliputi

1. Program script php yang kita buat dan pada konfigurasi.

2. Program PHP itu sendiri yang kita jalankan modul atau CGI ( vulnerability bawaan ).

3. Program web server yang berinteraksi dengan program PHP.

Namun pada tulisan ini hanya akan membahas tentang masalah keamanan no. 1.

Kode PHP yang tidak dieksekusi dengan PHP

Fungsi-fungsi PHP yang telah dijelaskan sebelumnya telah menjelaskan sedikit tentang fungsi
include dan require untuk kemudahan scripting. Contoh dari fungsi include dan require adalah
memisahkan antara kode PHP yang berisi fungsi-fungsi, class-class, atau konfigurasi dengan PHP
untuk implementasinya. Jika include file adalah kode PHP yang akan dieksekusi, maka pastikanlah
file tersebut diparsing atau di-saveas sebagai file PHP misalnya config.inc.php atau jika ingin
menggunakan ektensi .inc pastikan konfigurasi webserver membuat file tersebut diparsing sebagai
file PHP. Kemudian tambahakan script agar ketika file diakses secara langsung oleh user, maka hanya
akan didapatkan baris kosong atau langusng diredirect ke halaman lain.

if ( $_SERVER['PHP_SELF'] ) {

header("Location: ../index.html');

atau setup pada webserver agar tidak dapat menrequest file berekstensi.inc misalnya pada Apache,
kita dapat menambahakan konfigurasi seperti ini :

<Files ~ "\.inc$">

Order allow, deny

Deny from all

</Files>

Hal tersebut diatas dilakukan untuk menghindari attacker mendapatkan source kode file karena file
dikirim tanpa dieksekusi. Jika attacker bisa mendapatkan file source kode maka akan membuat mudah
bagi mereka untuk mencari lubang kemanan di aplikasi.
Variabel auto global

Vulnerability dan kelemahan dalam aplikasi yang menggunakan bahasa pemrograman PHP
sebagian besar disebabkan oleh kemampuan variable autoglobal. Dikarenakan mulai dari bahasa
pemrograman PHP versi 4.3.1 sudah membuat default autoglobal dan pada PHP versi ini variable aotu
global bernilai off. Sebenarnya, dengan adanya fasilitas autoglobal pada variable, pengembang atau
programmer diberikan kemudahan. Namum kemudahan ini pula yang menyebabkan terjadinya lubang
pada keamanan. Dengan fasilitas ini suatu variable misalnya $x tidak perlu dideklarasikan dahulu dan
bisa merupakan variable session, variable cookie, dan variable GET/POST.

Variable session adalah Suatu variabel dalam PHP digunakan untuk menyimpan informasi
atau mengubah setting user pada suatu session. Variabel session menangani informasi tentang satu
user dan bisa diakses untuk semua halaman dalam aplikasi.

Variabel cookies adalah suatu mekanisme penyimpanan data pada browser yang digunakan
untuk mengindentifikasi pemakai. Cookie bisa diatur dengan menggunakan fungsi setcookie().
Cookie merupakan bagian dari HTTP header, sehingga fungsi stecookie() harus dipanggil sebelum
ada keluaran apapun dikirim kebrowser, sama seperti keterbatasan yang dimiliki header(). Setiap
cookie yang dikirim dari client secara otomatis diterima PHP sebagai variable sama seperti metode
GET dan POST, tergantung dari konfigurasi variable register_globals dan variables_order. Jika akan
menyimpan banyak nilai pada sebuah cookie, tinggal ditambahkan [] pada nama cookie.

Akibat lubang kemanan tersebut bisa mengakibatkan :

o Denial of Service

o Authentication failure

o Account Hijacking

o Perusakan tampilan/layout

o Implantasi virus web browser

o Dan lain-lain

Kebanyak aplikasi PHP yang ditemukan lubang keamanannya akibat varibel autoglobal ini
adalah aplikasi yang open source, karena user dapat mengetahui kode aplikasi dan mengetahui nama-
nama varibel yang digunakan. Dan dapat dengan mudah dimanipulasi oleh hacker/cracker.
Fungsi include(), require() atau fopen()

Akibat dari mekanisme auto global yang telah kita bahas sebelumnya, suatu variable dalam
bahasa pemrograman PHP menjadi tidak jelas jenisnya. Sehingga jenis variable pun tidakdapat
dibedakan antara variable dari GET/POST, variable dari ENVIRONTMENT atau variable
COOKIES/SESSION. Akibatnya suatu variable apa saja yang kita definisikan dapat dengan mudah
kita isi dengan nilai dari variable GET atau POST.

Kelemahan yang biasa muncul ketika digunakan variable untuk parameter fungsi include(),
fungsi require(), atau fungsi fopen(). Kita tahu dengan fungsi-fungsi tersebutkita dapat melakukan
eksekusi file PHP dari file lain baik pada file dari disk local ataupun file dari situs lain. Jika variable
untuk parameter fungsi tersebut diketahui, maka attacker dapat mengganti nilai variable tersebut
dengan mengirimkan nilai variable lewat metode GET atau POST.

Contoh dibawah ini adalah vulnerability akibat menggunakan varibel pada fungsi include().
Perhatikan kode dibawah ini :

include($phpgw_info["server"]["include_root"]."/phpgwapi/phpgw_info.inc.php");

Kode tersebut tidak aman karena --walaupun menggunakan varibel array, variable $phpgw_info
masih dapat diganti dengan varibel GET/POST dari client atau diganti dengan sebuah url lain
misalnya

http://attacker/phpgwapi/phpgw_info.inc.php,

dimana file phpgw_info.inc.php dapat berisi kode php yang bisa dieksekusi oleh server korban/victim,
misalnya berupa kode :

<?php

$phpcode = 'echo("Hi there!<BR>");passthru("id");';

if (substr($HTTP_SERVER_VARS["HTTP_USER_AGENT"], 0, 3) == "PHP")

echo("<?php $phpcode ?>");

else

eval($phpcode);

exit();

?>
Kejadian seperti diatas, dimana suatu kode php dari situs lain diambil agar dieksekusi di server korban
sering disebut Cross Site Scripting (XSS).

Pengecekan kondisi dengan jenis varibel yang tidak jelas

Proses otentifikasi ataupun autorisasi seringkali dilakukan dengan mengecek kondisi yang
membandingkan variable GET/POST yang diberikan user ataupun variable dari session/cookies
dengan suatu nilai. Misalkan suatu halaman melakukan otentifikasi dengan kode seperti dibawah ini:

<?php

session destroy()

session_start();

$session_auth = "admin";

session_register("session_auth");

?>

dan kemudian sebuah halaman menggunakan autorisasi dengan cara mengecek varibel "session_auth"
seperti ini:

<?php

if (!empty($session_auth)) {

// Kode jika autorisasi berhasil disini

?>

Kode pengecekan tersebut tidaklah aman, sebab dengan mudah attacker dapat mengakses
halaman tersebut dengan URL seperti http://victimhost/page.php?session_auth=1 yang dapat
membuat kondisi pada if diatas menjadi TRUE. Kesalahan pemrograman seperti ini juga terjadi pada
jenis varibel dari GET/POST dan varibel cookie.
SQL Injection

Akibat lain dari varibel autoglobal adalah eksploitasi dengan SQL Injection. SQL injection
berarti memanipulasi suatu query atau memasukan suatu query dengan menggunakan query lain. Cara
ini dapat dilakukan karena pada program yang dibuat terdapat query yang menggunakan varibel.
Dibawah ini adalah contoh request yang mencoba melakukan SQL injection pada query yang
memiliki varibel $search.

http://localhost/search.php?search=a%27%20order%20by%20time%20desc%3b%20[query]

Varibel $search diatas bernilai "a' order by time desc; [query]" [query] dapat berisi SQL
query baru yang lengkap yang membahayakan, misalnya query untuk menghapus database/tabel.
Dibawah ini adalah contoh bagaimana terjadinya account hijacking dengan cara SQL injection yang
terjadi pada aplikasi portal PHP-Nuke & Post-Nuke. Query pada kode dibawh ini tidak aman karena
ada variabel yang nilainya diambil dari cookie. Karena cookie disimpan di client, user dapat dengan
mudah mengganti cookie-nya.

/* kode pada modules/News/article.php */

if ($save AND is_user($user)) {

cookiedecode($user);

sql_query("update ".$user_prefix."_users set umode='$mode', "

"uorder='$order', thold='$thold' where uid='$cookie[0]'", $dbi);

getusrinfo($user);

$info =

base64_encode("$userinfo[uid]:$userinfo[uname]:$userinfo[pass]:".

"$userinfo[storynum]:$userinfo[umode]:$userinfo[uorder]:".

"$userinfo[thold]:$userinfo[noscore]");

setcookie("user","$info",time()+$cookieusrtime);

Kesalahan pada kode diatas adalah bagian eksekusi query "where uid='$cookie[0]'" yang
mengambil varibel untuk uid dari cookie. Untuk mengeksploit vulnerabity ini maka kita perlu
membuat account (valid user) untuk melewati "if($save AND is_user($user))" kemudian mengubah
cookie dengan men-base64_decode kemudian mengubah dengan bagian username, men-base64-
encode cookie kemudian melakukan request dengan save=1 pada article.php lewat modules.php
Contoh lain adalah DoS dengan menggunakan metode SQL Injection pada situs PHPNuke dengan
request seperti ini :

http://www.nukesite.com/modules.php?name=News&file=article&sid=1234%20or%201=1

perhatikan bagian "sid=1234%20or%201=1" yang berarti "sid = 1234 or 1=1". Bagian


tersebut yang diinjeksikan ke query database. Metoda injeksi SQL dengan operator bolean OR
kemudian diikuti ekpresi yang bernilai benar/true merupakan metoda yang umum. Contoh berikut
memperlihatkan cara tersebut untuk mendapatkan account administrator dari database. Perhatikan
kode untuk query database berikut:

$query = "SELECT * FROM users WHERE username='$user' AND password='$pass'";

Attacker dapat memberikan nilai variabel $user dan $pass dari GET/POST tapi dengan sedikit
trik pengecekan password bisa dihindari. Jika kita mengirimkan varibel $user dengan isi "admin' OR
1=1 ##" maka query tersebut akan menjadi

SELECT * FROM users WHERE username='admin' OR 1=1 ##' password=''

Setelah tanda # pada query tersebut akan dianggap komentar oleh database, sehingga jika
query tersebut digunakan untuk proses otentikasi user dengan cara:

if ( mysql_num_row($query) < 0 ) {

echo "You're suck!"; exit();

maka attacker telah berhasil melewati proses otentikasi tanpa perlu tau password administrator.

Penjelasan diatas adalah beberapa contoh vulnerability atau kelemahan yang ada didalam
bahasa pemrograman PHP dan salah satu antisipasi yang dapat kita lakukan untuk mencegahnya
adalah melakukan autentifikasi dengan menggunakan MD5.

MD5 memproses teks masukan ke dalam blok-blok bit sebanyak 512 bit sebanyak 16 buah.
Keluaran dari MD5 berupa 4 blok yang masing-masing 32 bit yang mana akan menjadi 128 bit yang
biasa disebut dengan nilai hash.
BLOCK PESAN (512 bit)

Ronde 1 Ronde 2 Ronde 3 Ronde 4

Gambar 6

Simpul utama MD5 mempunyai blok pesan dengan panjang 512 bit yang kemudian
dimasukan ke dalam 4 buah ronde. Dan hasil keluaran dari MD5 adalah berupa 128 bit dari byte
terendah A yaitu ronde 1 dan byte tertinggi D yaitu ronde 2.
Setiap pesan yang akan dienkripsi terlebih dahulu dicari berapa banyak bit yang terdapat pada
pesan. Kita dapat mengangap bahwa pesan yang akan kita enkripsi adalah pesan yang memiliki L bit.
Disini L adalah non negative integer, L dapat pula NULL dan tidak harus keliapatan delapan. Pesan
dengan panjang L bit dapat diidentifikasikan sebagai berikut :
y_0 y_1 y_2 y_3 … y_(L-1).
L x 5 1 2 b it

K b it P a d d in g b its K m o d 2 64
( 1 - 5 1 2 b it)
P esan 1 0 0 0 ...0 0 0 P a n ja n g P e s a n

512 512
512 512

Y 0 Y 1 ... Y q ... Y L - 1

512 512 512 512

ABCD H M D 5
H M D 5
H M D 5
H M D 5
128 128 128 128 128 128

128

M e s s a g e D ig e s t

Gambar 7
Terdapat 4 langkah yang menjelaskan Gambar diatas yang mana kita tempuh untuk mencari
‘sidik jari’ atau inti dari pesan yaitu menambah bit, menambah panjang pesan, inisialisasi MD5, dan
proses pesan dalam blok 16 word.

Menambah bit
Pesan akan ditambahkan bit-bit tambahan sehingga panjang bit akan kongruen dengan 448
mod 512. Hali ini berarti pesan akan mempunyai panjang yang hanya kurang 64 bit dari kelipatan 512
bit. Penambahan bit selalu dilakukan walaupun panjang dari pesan sudah kongruen dengan 448 mod
512 bit. Penambahan bit dilakukan dengan menambahkan “1” diawal dan diikuti “0” sebanyak yang
diperlukan sehingga pesan akan kongruen dengan 448 mod 512.

Penambahan Panjang Pesan


Setelah penambahan bit, pesan masih membutuhkan 64 bit agar kongruen dengan kelipatan
512 bit. 64 bit tersebut merupakan perwakilan dari L (panjang pesan sebelum penambahan bit
dilakukan). Jika panjang pesan > 264 maka yang diambil adalah panjangnya dengan modulo 264.
Dengan kata lain, jika panjang pesan semula adalah L bit, maka 64 bit yang ditambahkan menyatakan
K modulo 264. Setelah ditambah dengan 64 bit, panjang pesan sekarang adalah 512 bit. Penambahan
pesan ini biasa disebut juga MD strengthening atau Penguatan MD.

Inisialisasi penyangga MD5

Pada MD5 terdapat empat buah word atau penyangga (buffer) yang masing-masing
panjangnya 32 bit. Total panjang penyangga adalah 4 x 32 = 128 bit. Empat buah penyangga
berfungsi untuk menginisialisasi message digest untuk pertama kali dan menampung hasil antara dan
hasil akhir MD5.

Keempat penyangga ini diberi nama A, B, C , dan D. Setiap penyangga diinisialisasi dengan
nilai-nilai hexadecimal dan berninali tetap.

• Word A : 01 23 45 67

• Word B : 89 AB CD EF

• Word C : FE DC BA 98

• Word D: 76 54 32 10

Register-register ini biasa disebut dengan nama Chain variabel atau variabel rantai.
Pengolahan Pesan dalam Blok Berukuran 512 bit
Pesan yang telah melewati 3 proses tinggal melewatkan proses terakhir yaitu pengolahan
pesan. Pesan dibagi menjadi L buah blok yang masing-masing panjangnya 512 bit (Y0 sampai YL – 1).
Setiap blok 512-bit diproses bersama dengan penyangga MD menjadi keluaran 128-bit, dan ini
disebut proses HMD5. Gambaran proses HMD5 diperlihatkan pada Gambar 4.

Y q

M D q

512

ABCD ← f F ( ABCD, Yq , T [1..16])

A B C D
ABCD ← f G ( ABCD, Yq , T [17..32])

A B C D
ABCD ← f H ( ABCD, Yq , T [33..48])

A B C D
ABCD ← f I ( ABCD, Yq , T [49..64])

+ + + +

128

M D q + 1

Gambar 8. Pengolahan blok 512 bit (Proses HMD5)

Proses HMD5 terdiri dari 4 buah putaran, dan masing-masing putaran melakukan operasi dasar
MD5 sebanyak 16 kali dan setiap operasi dasar memakai sebuah elemen T. Jadi setiap putaran
memakai 16 elemen Tabel T.Pada Gambar 4, Yq menyatakan blok 512-bit ke-q dari pesan yang telah
ditambah bit-bit pengganjal dan tambahan 64 bit nilai panjang pesan semula. MD q adalah nilai
message digest 128-bit dari proses HMD5 ke-q. Pada awal proses, MDq berisi nilai inisialisasi
penyangga MD. Fungsi-fungsi fF, fG, fH, dan fI masing-masing berisi 16 kali operasi dasar terhadap
masukan, setiap operasi dasar menggunakan elemen Tabel T. Operasi dasar MD5 diperlihatkan pada
Gambar 9.
a b c d

+ X [k ]

+ T [i]

C LS s

Gambar 10. Operasi dasar MD5

Operasi dasar MD5 yang diperlihatkan pada Gambar 10 dapat ditulis dengan sebuah persamaan
sebagai berikut:
a ← b + CLSs(a + g(b, c, d) + X[k] + T[i])

yang dalam hal ini,

a, b, c, d = empat buah peubah penyangga 32-bit (berisi nilai penyangga A, B, C, D)

g = salah satu fungsi F, G, H, I

CLSs = circular left shift sebanyak s bit

X[k] = kelompok 32-bit ke-k dari blok 512 bit message ke-q. Nilai k = 0 - 15.

T[i] = elemen Tabel T ke-i (32 bit)

+ = operasi penjumlahan modulo 232


Fungsi fF, fG, fH, dan fI adalah fungsi untuk memanipulasi masukan a, b, c, dan d dengan ukuran 32-bit.
Masing-masing fungsi dapat dilihat pada Tabel 1.

Tabel 1. Fungsi-fungsi dasar MD5

Nama Notasi g(a, b, c, d)

fF F(b, c, d) (b ∧ c) ∨ (~b ∧ d)

fG G(b, c, d) (b ∧ d) ∨ (c ∧ ~d)

fH H(b, c, d) b⊕ c⊕ d

fI I(b, c, d) c ⊕ (b ∧ ~ d)

Catatan: operator logika AND, OR, NOT, XOR masing-masing dilambangkan dengan ∧, ∨, ~,

Dari persamaan operasi dasar MD5 dapat dilihat bahwa masing-masing fungsi fF, fG, fH, dan fI
melakukan 16 kali operasi dasar.

Misalkan notasi
[abcd k s i]

menyatakan operasi

a ← b + ((a + g(b, c, d) + X[k] + T[i])<<<s)

yang dalam hal ini <<<s melambangkan operasi circular left shift 32-bit atau pengeseran bit kekiri
sebanyak s bit. Setelah putaran keempat, a, b, c, dan d ditambahkan ke A, B, C, dan D, dan
selanjutnya algoritma memproses untuk blok data berikutnya (Yq+1). Keluaran akhir dari algoritma
MD5 adalah hasil penyambungan bit-bit di A, B, C, dan D. Dari uraian di atas, secara umum fungsi
hash MD5 dapat ditulis dalam persamaan matematis berikut:

MD0 = IV

MDq + 1 = MDq + fI(Yq + fH(Yq + fG(YQ + fF(Yq + MDq))))

MD = MDL – 1

yang dalam hal ini,


IV = initial vector dari penyangga ABCD, yang dilakukan pada proses inisialisasi
penyangga.

Yq = blok pesan berukuran 512-bit ke-q

L = jumlah blok pesan

MD = nilai akhir message digest

Hasil MD ini lah yang nantinya akan disertakan dalam isi pesan, file yang akan didownload, dan
kemudian tampilan layout website yang kemungkinan diubah oleh para hacker dan cracker untuk
menjadi sebuah acuan bahwa pesan, file, dan website ini adalah benar keasliannya

Kesimpulan
1. PHP atau personal homepage yang dapat dipakai untuk memprogram situs web dinamis dan
memiliki banyak kelebihan salah satunya kemudahan mencari sumber referensi.

2. Kriptography adalah sebuah ilmu dan dapat pula diibaratkan sebagai seni yang mengatur
kerahasiaan data dan menyembunyikan informasi untuk mencegah pihak yang tidak berhak
membacanya atau pihak yang tidak bertanggung jawab yang ingin merubahnya.

3. Kriptography juga telah menyiapkan teknologi yang dipakai untuk menjaga otentifikasi dan
integritas data. Digital Signature yang lebih sering kita kenal sebagai MD5 kriptography.

4. Salah satu contoh kelemahan PHP adalah kode PHP yang tidak dieksekusi sebagai file PHP,
variable autoglobal, fungsi include(), fungsi require(), fungsi fopen(), dan SQL injection.

5. Langkah - langkah yang kita tempuh untuk mencari ‘sidik jari’ atau inti dari pesan yaitu
menambah bit, menambah panjang pesan, inisialisasi MD5, dan proses pesan dalam blok 16
word.

Daftar Pustaka
Wikipedia.com

klik-kanan.com

prothelon.com

areaphp.wordpress.com

geocities.com

Mulya, megah, Kriptography, fasilkom UNSRI, 2008.

Rahayu, Flourensia Sapty, Proteksi dan Teknik Keamanan Sistem Informasi, Universitas
Indonesia, 2005.

Sofwan, Aghus, Aplikasi Kriptography dengan Algoritma Message Digest 5 (MD5), Universitas
Diponegoro, 2006

You might also like