KEAMANAN PADA APLIKASI WEB DENGAN PHP Oleh: Monica S. Sembiring Ridwan Sitepu
Pengantar 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.
Lubang Keamanan PHP Lubang keamanan yang paling umum di dalam skrip PHP dan tak terkecuali pada aplikasi web yang manapun, adalah berkaitan dengan User Input. Banyak skrip menggunakan informasi user yang legal dalam bentuk format web dan memproses informasi ini dengan berbagai cara. Jika user input ini dilegalkan tanpa batasan, maka user input potensial menyisipkan perintah-perintah yang tidak diinginkan dalam skrip.
Langkah-Langkah Menghindari Lubang-Lubang dalam Aplikasi PHP
Variabel Auto Global Kebanyakan aplikasi PHP yang ditemukan lubang keamanannya akibat varibel autoglobal adalah aplikasi yang open source, karena user dapat mengetahui kode aplikasi dan mengetahui nama-nama varibel yang digunakan. Solusinya: Menonaktifkan register_globals dalam file php.ini. Menuliskan kode untuk menginisialisasi variabel global. Menjamin suatu variabel bahwa variabel itu benar-benar datang dari suatu bagian dan tidak berasal dari attacker. Menuliskan kode untuk mengecek bahwa variabel global tidaklah berada dalam array $HTTP_POST atau $HTTP_GET.
Fungsi include(), require() atau fopen() Kelemahan biasanya muncul ketika digunakan varibel untuk parameter fungsi include(), require() atau fopen(). Dengan fungsi tersebut dapat dilakukan eksekusi/parsing file PHP dari file lain, baik pada file dari disk local atau file dari situs lain. Jika varibel untuk parameter fungsi tersebut diketahui,maka attacker dapat mengganti nilai varibel tersebut dengan mengirimkan nilai varibel lewat metode GET atau POST. Solusinya: Cek apakah nama file yang dibuat adalah salah satu dari nama file yang diinginkan Hindari penggunaan variabel sebagai nama file. Jangan percaya variabel global
Hilangkan Karakter-Karakter Escape HTML Dalam Teks Kesalahan umum yang terjadi adalah penggunaan nilai variabel yang disediakan oleh user atau URL dalam sebuah query SQL tanpa menghilangkan karakter-karakter khusus.
Hindari Upload Yang Salah File-file upload dapat rusak dari sebuah kemungkinan berbahaya yang berasal dari permasalahan variabel global yang tidak dapat dipercaya. Hal ini layak dipertimbangkan sebagai sebuah permasalahan tambahan. Saat sebuah file di-uploaded, script PHP menyimpan file uploaded itu. Akan tetapi, user dapat membangun URL yang mengatur nilai variabel ini hingga menjadi nilai yang tidak diharapkan seperti /etc/passwd dan tidak akan meng-upload file. Skrip tersebut kemungkinan kemudian menyalin file itu ke sebuah lokasi atau menampilkan isi file ke user.
Gunakan Ekstensi .php untuk Semua File Script Banyak pemrogram PHP menggunakan ekstensi .inc atau .class untuk file library dan file konfigurasi yang diakses dengan menggunakan fungsi include. Jika attacker mengambil URL untuk file .inc atau .class dalam browser-nya, maka dia tidak akan mampu melihat isi file ini, termasuk kode PHP apapun. Boleh jadi hal ini memperlihatkan hak keintelektualan, password, atau kelemahan dalam pengkodean.
Tempatkan Isi Yang Sensitif Di Luar Direktori Root Dokumen Banyak sistem PHP dirancang untuk membatasi akses ke dokumen atau citra melaluiautentifikasi user dan daftar kontrol akses. Akan tetapi, dokumen-dokumen ini sering disimpan sebagai file dalam sebuah subdirektori dari direktori yang berisi skrip PHP. Hal ini tentu membuat file-file tersebut tersedia langsung jika user memakai URL yang tepat dalam browser.
Berhati-Hati terhadap Server Bersama Banyak situs PHP mengambil keuntungan dengan murahnya tempat yang disediakan oleh pihak ketiga. Penyedia tempat ini biasanya menggunakan server bersama dengan pengguna-pengguna lain. Pengguna lain ini mungkin saja mampu menggunakan skrip PHP atau akses shell untuk memodifikasi, mengakses, atau menghapus file-file atau menentukan password basis data. Serangan lain yang mungkin adalah kemampuan menciptakan file sesi (standarnya tersimpan dalam /tmp) yang akan mengizinkan attacker menggunakan autentifikasi tersebut.
Session Spoofing Sebuah session dapat berisi informasi-informasi yang krusial seperti username, password dan lain-lain sehingga attacker dapat mengambil informasi tersebut, atau paling tidak, jika sistem pengecekan untuk otentifikasi tidak terlalu rumit, misalnya tanpa pengecekan IP host dari client, maka dengan menggunakan session ID attacker dapat men-take over session tersebut. Atau mungkin, jika attacker tahu apa yang harus diisi pada file tersebut, maka attacker dapat membuat sessionya sendiri.
Beberapa Tips Untuk Pengamanan Aplikasi Web Dengan PHP
Mengamankan Layout atau Tampilan Untuk menghindari tag-tag HTML yang dapat merusak tampilan/layout website, atau menghindai implantasi scripting seperti diatas, kita dapat men-disable tag-tag tersebut. Kita dapat memilih tag-tag apa saya yang diperbolehkan dengan fungsi strip_tags() sehingga tag yagn tidak diperbolehkan ditampilkan sebagaimana adanya dan tidak diparsing oleh browser sebagai kode HTML.
Batasi Ukuran Data Yang Dikirim Ke Server Dan Database Jika kita membuat suatu aplikasi guestbook misalnya, tentu saja kita tidak mau pengunjung dapat mengisi guestbook dengan tulisan yang sangat panjang sekali. Oleh karena itu ada baiknya berfikir untuk selalu membatasi fasilitas untuk user.
Filter Kata-kata Kotor (Bad Words) Mungkin ini tidak ada hubungannya dengan kemanan sistem, tapi jika anda ingin membangun website yang 'baik' sebaiknya hidari kata-kata sembarangan yang bisa diposting oleh user.
Cegah flooding Untuk mencegah flooding kita bisa menggunakan fasilitas session untuk mencegah agar user hanya dapat mengirimkan data sekali atau beberapa kali saja
Cegah Mekanisme Upload File PHP Yang Dapat Dieksekusi Jika seseorang menupload file seperti dibawah ini : <?php $cmd = "cat /etc/passwd"; // atau $cmd ="echo "HACKED\">".dirname($_SERVER['PATH_TRANSLATED'])."/hacked.html"; $h = shell_exec($cmd); echo $h; ?> Apabila file tersebut bisa dipanggil lewat URL maka script tersebut dapat dieksekusi oleh PHP dan hasilnya ... BOOM !