Membuat Aplikasi PHP Yang Aman Bag. 2
Dikirim: September 2nd, 2006 | Oleh: Riyogarta | Kategori: PHP | 14 Komentar »Sambungan dari:
Membuat Aplikasi PHP Yang Aman Bag. 1
2. Pergunakan Anti SQL Injection
SQL Injection merupakan teknik menyusupkan perintah SQL kedalam query dengan cara memanipulasi input data pada sebuah aplikasi. Anda bisa membaca dan mempelajari bagaimana SQL injection dapat terjadi di SQL Injetion Attack by Example.
Bagaimana menanggulanginya? Berikut adalah fungsi Anti SQL Injection yang sering saya pergunakan.
-
function anti_sql_injection( $input ) {
-
// daftarkan perintah-perintah SQL yang tidak boleh ada
-
// dalam query dimana SQL Injection mungkin dilakukan
-
"insert", "select", "update", "delete", "truncate",
-
"replace", "drop", " or ", ";", "#", "--", "=" );
-
-
// lakukan cek, input tidak mengandung perintah yang tidak boleh
-
$breturn=true;
-
foreach($aforbidden as $cforbidden) {
-
if(strripos($input, $cforbidden)) {
-
$breturn=false;
-
break;
-
}
-
}
-
return $breturn;
-
}
Cara memanfaatkan fungsi tersebut adalah sebagai berikut (contoh pada proses login dimana SQL injection kerap dilakukan)
-
if(anti_sql_injection($_POST['user']) and
-
anti_sql_injection($_POST['password'])) {
-
// lakukan proses login
-
} else {
-
}
Selain itu, SQL injection juga dapat dicegah dengan pengaturan priveleges pada database yang dipergunakan. Misalnya, bagian situs yang hanya berfungsi memperlihatkan data melalui query select menggunakan user dengan privelege select saja. Bagian situs yang berfungsi untuk memberi kesempatan pembaca untuk berkomentar menggunakan user dengan privelege insert saja dst.
3. Pergunakan session_regenerate_id() Untuk Pembuatan Session
Selintas penggunaan session adalah teknik yang aman untuk menjaga sebuah halaman agar tidak bisa dikunjungi oleh sembarang orang. Misalnya, pemanfaatan session untuk halaman administrasi sebuah situs. Namun, session pun memiliki titik kelemahan yang bisa dieksploitasi attacker dan dipergunakan sebagai senjata untuk menyerang sistem aplikasi.
Cara paling mudah untuk memanfaatkan session sebagai titik kelemahan sistem aplikasi adalah menggunakan metode fixation. Session faxation adalah metode dimana seorang attacker menyerang browser user sebelum login dilakukan. Yaitu dengan memasukkan id session untuk kemudian dimanfaatkan dengan tujuan tertentu.
Berikut adalah ilustrasi bagaimana session fixation dilakukan untuk menyerang keamanan sistem aplikasi berbasis web.
-
if($_SESSION['id_user']<>13) {
-
// Proses login (authentifikasi)
-
// Jika login sukses, jalankan perintah dibawah ini
-
$_SESSION['id_user']=13;
-
} else {
-
if($_SESSION['id_user']==13) {
-
// lakukan proses A
-
}
Script diatas adalah bagian dimana variable id_user (13) didaftarkan sebagai variable session JIKA pengunjung belum login dan login yang dilakukan sukses. Artinya, jika login pernah dilakukan maka halaman ini tidak akan melakukan proses login dan langsung melakukan proses A.
Langkah selanjutnya, pastikan bahwa browser yang digunakan bersih dari session sebelumnya. Lalu ketikan alamat script diatas dengan menambahkan PHPSESSID=1804.
Misalnya nama file script diatas adalah test.php dan diletakkan di server.com, maka yang harus Anda tuliskan adalah http://server.com/test.php?PHPSESSID=1804 dan lakukan login. Setelah itu, silakan Anda mencoba mengakses alamat tersebut diatas menggunakan browser lain atau komputer lain yang terhubung dengan server.com. Hasilnya, Anda akan melakukan proses A tanpa melakukan login!
Hal diatas terjadi akibat id session yang dipergunakan saat session dibentuk adalah sama dengan id session yang sebelumnya telah diketikkan secara "paksa" dalam URL. Untuk menanggulangi hal ini, diperlukan fungsi untuk meng-generate ulang id session yaitu dengan menggunakan fungsi session_regenerate_id() sehingga bagian script diatas menjadi seperti dibawah ini:
-
if($_SESSION['id_user']<>13) {
-
// Proses login (authentifikasi)
-
// Jika login sukses, jalankan perintah dibawah ini
-
$_SESSION['id_user']=13;
-
} else {
-
if($_SESSION['id_user']==13) {
-
// lakukan proses A
-
}
Secara default, penggunaan fungsi session_regenerate_id() tidak serta merta akan menghapus session sebelumnya secara otomatis. Agar session_regenerate_id() menghapus/menghancurkan session sebelumnya, Anda perlu menambahkan parameter boolean true pada fungsi tersebut. Sayangnya, parameter ini hanya bisa digunakan untuk PHP dengan versi 5.1.0 keatas.
berkomentar pada jam 10:57 am
tanggal 2 September 2006
[...] Bersambung ke Membuat Aplikasi PHP Yang Aman Bag. 2 [...]
berkomentar pada jam 5:17 pm
tanggal 11 September 2006
Hi Riyo!
Aku alumni BPI 1 angkatan 88, cuma suer, aku ngga ngeh kamu tuh yang mana .. hehehe. sorry. aku sempet liat website reuni, dah lewat ya? sayang banget … kalo kumpulan2 alumni BPI1 angkatan 88 ini ada websitenya ngga?
thanks!
berkomentar pada jam 4:21 pm
tanggal 12 December 2006
bagaikjkjjgf
berkomentar pada jam 8:14 am
tanggal 15 April 2008
thank’s
berkomentar pada jam 12:21 pm
tanggal 10 December 2008
tutorial yg bagus mas
berkomentar pada jam 10:45 am
tanggal 3 March 2009
kalau bisa dikasih menu download mas untuk artikel yang bagus ini
berkomentar pada jam 12:46 am
tanggal 27 January 2010
boleh di coba nih
.-= Tommy´s last blog ..Pelayanan Terbaik Telkom Speedy ? =-.
berkomentar pada jam 3:14 pm
tanggal 19 February 2010
Terima Kasih Atas tutorialnya sangat berguna. salam kenal
berkomentar pada jam 7:33 pm
tanggal 13 November 2010
bagai mana nih cra pnggunaan php ,bedanya php dan html
ksh tau yaa…
Trimakasihhh,,..
berkomentar pada jam 6:23 pm
tanggal 10 December 2010
nice tutor…..
berkomentar pada jam 9:34 pm
tanggal 11 December 2010
nice tutor my brother
berkomentar pada jam 10:53 pm
tanggal 2 May 2011
thanks mas artikelnya sangat jelas dan mudah d mengeti, sekali lagi terimah kasih,…
Salam
berkomentar pada jam 3:34 pm
tanggal 25 June 2011
artikelnya keren mas..
kunjungi juga blog saya ya
jasa pembuatan website dan aplikasi php
berkomentar pada jam 11:02 am
tanggal 3 January 2012
nice, lihat juga artikel aq
cara mengatasi asma