Tips sederhana pengamanan aplikasi PHP

irigster

New member
Date: Sunday, October 09, 2005 Hits: 10641 By: singmbiyen
Pertama kali saya ingin berterima kasih kepada seluruh pengembang program-program open source dan terlebih lagi untuk para pengembang PHP. Pada kesempatan kali ini saya ingin berbagi pengalaman saya tentang pemrograman web dengan PHP.
Saya juga minta maaf bagi semua saja yang merasa pernah membahas tentang materi yang saya sampaikan ini, karena saya tidak menyebutkan nama anda. Terus terang (bukan untuk sombong) materi ini saya dapatkan dari pengalaman sekitar 1/2 tahun megang PHP, dan materi yang saya dapatkan banyak dari pengalaman bongkar program orang dan baca manual dari php.org.
Tips sederhana pengamanan aplikasi PHP menurut saya bukan judul yang berlebihan. Kayaknya dah cukup basa-basinya lebih baik langsung masuk ke materi. Untuk sedikit melakukan pengamanan aplikasi PHP, bisa dilakukan dengan langkah berikut :

1
Pastikan register global pada kondisi off, bisa disetting pada php.ini -> register_globals = Off.. Bagi beberapa programer yang sudah lama berkecimpung di PHP mungkin akan sedikit kaku dengan setting ini, karena mereka biasa menggunakan $nama_argumen, untuk mengambil nilai dari argumen yang dilewatkan melalui url atau yang didapat dari form. Tapi kalau dengan setting ini pengambilan nilai dari argumen dapat dilakukan dengan $HTTP_GET_VARS[] atau $HTTP_POST_VARS. Dengan setting ini saya katakan omong kosong kalau form dengan method "get" tidak aman.
2
Buatlah file index.html dalam setiap direktori dalam aplikasi yang dibangun, walau file tersebut tidak dipakai, atau dengan kata lain tidak terdapat string apapun., ini untuk mengatasi konfigurasi standart dari kebanyakan web server yang akan menampilkan seluruh file dan direktori pada direktori yang diminta, jika dalam direktori yang diminta tidak terdapat file default yang otomatis akan dipanggil.
3
Tangani semua argumen yang kita dapatkan baik dari url atau dari form, dan bila ditemukan nilai argumen tidak sesuai dengan perjanjian pembangunan aplikasi maka tangani keadaan tersebut, baik di alihkan ke halaman error, atau ada banyak cara lain. Sebagai contoh ada 2 nilai yang diijinkan yaitu list,dan tampil, maka anda bisa menanganinya dengan
----------------------------code------------------------------------
if($HTTP_GET_VARS["argumen"]=="list")
penanganan1();
elseif($HTTP_GET_VARS["argumen"]=="tampil")
penangan2();
else
header("Location:./error.php");
-----------------------------code-----------------------------------
4
Bila aplikasi yang dibuat memiliki banyak pengguna dan ada tingkatan otoritas pengguna, buatlah tabel pada database untuk menyimpan data otoritas. Sebagai contoh seperti berikut (dengan MySQL )
------------------------MySQL query---------------------------------
CREATE TABLE `kewenangan` (
`idkewenagan` tinyint(4) NOT NULL default '0',
`kewenagan` varchar(255) NOT NULL default '',
PRIMARY KEY (`idkewenagan`)
) TYPE=MyISAM;
CREATE TABLE `pengguna` (
`username` varchar(255) NOT NULL default '',
`password` varchar(32) binary NOT NULL default '',
`idkewenagan` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`username`)
) TYPE=MyISAM;
------------------------MySQL query-------------------------------
dan buatlah fungsi untuk mengecek otoritas setiap pengguna yang masuk ke sistem (untuk lebih lengkap bisa dibaca pada artikelku sebelumnya yang berjudul).
-------------------------fungsi cek otoritas---------------------------
function cekotoritas($username,$otoritas,$mysqllink) {
$sqlcek="select username from pengguna,kewenagan where
pengguna.idkewenangan=kewenagan.idkewenangan and
kewenangan.idkewenangan='$otoritas' and pengguna.username='username'";
$kerjakancek=mysql_query($sqlcek,$mysqllink);
$datacek=mysql_fetch_row($$kerjakancek);
if($datacek[0]!=NULL)
return 1;
return 0;
}
-------------------------fungsi cek otoritas---------------------------
dan gunakan fungsi ini pada awal setiap halaman, untuk cek otoritas pengguna, apakah berhak mengakses halaman tersebut atau tidak. Sangat disarankan untuk menggunakan fungsi ini pada halaman pemasukan data ke database, jadi sebelum data dimasukan dicek dulu apakah user bersangkutan berhak atau tidak. Cara ini untuk menghindari pemasukan data langsung melalui url, jika si includer tahu path dari halaman pemasukan data.
5
Sangat disarankan untuk membuat privilege yang berbeda pada database untuk setiap pengguna yang diijinkan mengakses aplikasi tersebut. Mungkin cara ini akan saya bahas tersendiri pada artikel ku berikutnya. karena cara ini cukup banyak kalau di bahas.
Mungkin untuk kali ini sekian dulu dari saya, oh ya lupa, ada 1 lagi catatan bahwa beberapa tips diatas akan menyebabkan server anda bekerja lebih keras. Tetapi kalau aplikasi yang dibangun adalah aplikasi yang penting dan memiliki resiko dan tanggung jawab besar, maka sangat disarankan menggunakan server yang tahan banting atau bisa digunakan sistem clustering baik di web server atau di database server.

Dan saya ingin mengucapkan terima kasih kepada :
- Pak dhani (xnuxer)
- setiawan_sm@yahoo.com
- Ph03n1X, dan semua dedemit cyber kawit kebumen, keep we always ngapak
- teman-temanku di ksl UAD, osrg UAD, symbian programming community UAD, java programming community UAD
- semua di jasakom-dot-com
Source: JASAKOM Information Center
 
Back
Top