Tuesday, July 30, 2013

Keamanan Aplikasi WEB Berbasis PHP Part I


Aplikasi web dengan PHP telah menjadi hal yang populer dalam menyediakan akses global terhadap data, pelayanan, dan produk. Akan tetapi, akses global yang merupakan keuntungan utama penggunaan web ini juga memberikan lubang-lubang keamanan yang bisa diakses secara global dan sering disalahgunakan. Memang bukan hal yang sulit untuk membuat aplikasi web menggunakan skrip PHP, tetapi aplikasi ini bisa jadi mengandung lubang-lubang berbahaya tanpa disadari. Kejadian ini ditampilkan oleh banyak aplikasi web umum lainnya., termasuk PHP yang ternyata memiliki lubang-lubang keamanan berbahaya. Kode program sering dibuat untuk mengidentifikasi lubang ini, tetapi biasanya kode program tersebut mudah diakses oleh publik.
Tulisan ini menampilkan langkah-langkah yang dapat membantu mengidentifikasi atau menghindari lubang-lubang demikian dalam aplikasi yang dituliskan dengan menggunakan PHP.


1. Variabel Auto Global


Pada umumnya aplikasi PHP yang memiliki lubang keamanan berasal dari kemampuan varibel autoglobal. Dengan adanya fasilitas autoglobal pada varibel, programer diberikan kemudahan mengaplikasikan skrip PHP, tapi memudahkan pula terjadinya lubang keamanan. Dengan fasilitas ini suatu varibel misalnya $x tidak perlu dideklarasikan dahulu dan bisa merupakan varibel session, varibel cookie, varibel dariGET/POST. Tentu saja sebenarnya kelemahan keamanan bukan semata-mata berawal dari varibel autoglobal, melainkan juga kurangnya kewaspadaan dari programer itu sendiri. Akibat lubang kemanan tersebut dapat mengakibatkan hal-hal berikut: 

 a). denial of service, b). authentication failure,


c). account hijacking,
d). perusakan tampilan(layout),


e). implantasi virus web browser,dan lain-lain. 

Kebanyakan aplikasi PHP yang ditemukan lubang keamanannya akibat varibel auto global ini adalah aplikasi yang open source, karena user dapat mengetahui kode aplikasi dan mengetahui nama-nama varibel yang digunakan. Jadi dengan sedikit trik 'security through obscurity' sebenarnya skrip agak terlindungi dari akibat fasilitas varibel autoglobal ini. Tapi tentu saja cara itu bukan hal yang baik, karena cepat atau lambat lubang itu akan ditemukan.



Jika pilihan register_globals diaktifkan, maka PHP akan membentuk variabel global untuk setiap variabelGET, POST, dan cookie termasuk dalam meminta (request) HTTP. Ini berarti bahwa attaker kemungkinan mampu mengatur variabel-variabel ini di luar perkiraan. Perhatikan kode berikut yang ditujukan untuk melakukan akses tanpa nama terhadap sebuah artikel tunggal dan meminta autentifikasi untuk semua artikel lain:



// anggaplah bahwa $article_id ditentukan oleh URL 

if ($article_id == 0) { 

$guest_ok = true; 


if (!$guest_ok) { 

// cek apakah pengguna diizinkan dengan menggunakan fungsi yang 

// didefinisikan pada tempat lain 

check_auth(); 

}


Kode ini mungkin terlihat dapat dijalankan karena variabel $guest_ok secara umum akan diinisialisasifalse. Akan tetapi, jika user memasukkan guest_ok=1 dalam URL, maka dia akan lolos autentifikasi dan mengakses artikel apapun dalam sistem.


Permasalahan yang sama dapat muncul saat melakukan pengecekan keamanan saat terlihat hubungan (link) ke halaman, tetapi tidak melakukan pengecekan keamanan pada halaman yang terhubung denganuser. Dalam sebuah sistem di mana user mendapat hak akses untuk memilih daftar artikel. Programmer seharusnya melakukan pengecekan keamanan saat mengeluarkan daftar artikel yang tersedia dan saat menampilkan sebuah artikel yang sudah dipilih dari daftar itu. Tanpa melakukan pengecekan ini, attackerdapat mengetik kode URL untuk artikel-artikel yang seharusnya tidak boleh diakses olehnya dan melihat artikel itu tanpa kesulitan. Variasi umum lain untuk permasalahan ini adalah menggunakan fitur “Remember My Login” dengan menyimpan pengenal user dalam sebuah cookie, yang mengizinkan usermengubah nilai cookie-nya untuk login. 

Permasalahan ini dapat muncul di sembarang tempat dalam skrip yang dibuat. Perhatikanlah dengan hati-hati daerah-daerah berikut.



▪ Kode pengecekan autentifikasi dan izin.
▪ Gunakan variabel sebelum diinisialisasi(dapat diatur melalui error_reporting)


▪ Gunakan variabel yang dirancang untuk mengatur permintaan oleh perintah GET atau POST

Langkah-langkah yang dapat dilakukan untuk mengatasi permasalahan ini adalah sebagai berikut.



▪ Menonaktifkan register_globals dalam file php.ini. Sesudah melakukan perubahan ini, Anda akan menggunakan $HTTP_GET_VARS dan $HTTP_POST_VARS yang berhubungan dengan array untuk mengakses input GET dan POST sebagai pengganti penggunaan variabel global. Hal ini mungkin akan membosankan, tetapi jauh lebih aman.
▪ Jika fungsi “Remember My Login” dibutuhkan, masukkan sebuah password atau berusaha keras menebak pengenal acak dalam cookie (fungsi “Remember My Login” masih bisa memberikan lubang keamanan lain seperti pengguna jahat yang membagi sebuah mesin dengan seorang pengguna resmi untuk mendapatkan akses).

▪ Menuliskan kode untuk menginisialisasi variabel global. Kode fragmen di atas dapt dikembangkan dengan menginisialisasi $guest_ok sehingga bernilai false di awal script.
▪ Menjamin suatu variabel bahwa variabel itu benar-benar datang dari suatu bagian dan tidak berasal dariattacker.
▪ Menuliskan kode untuk mengecek bahwa variabel global tidaklah berada dalam array $HTTP_POST atau $HTTP_GET.

Terima Kasih Semoga Bermanfaat...
Bagikan artikel ini :


Comments
0 Comments

0 comments:

Post a Comment

Terima Kasih atas Komentar Anda